java利用oss实现下载功能

  

本文实例为大家分享了如何利用oss实现下载功能的具体代码,供大家参考,具体内容如下

  

目前我接触的实现下载功能有3种方式。第一种,就是把要下载的内容写到本地目录,然后把目录返回给前端,利用一个标签下载。第二种,本地不允许访问,挂载目录,使目录可以对外访问,同样的,把目录返给前端下载。第三种,使用第三方存储,其中阿里云oss就是一种可以用来实现的对象存储。

  

首先,导入依赖包

        & lt; dependency>   & lt; groupId> com.aliyun.oss   & lt; artifactId> aliyun-sdk-oss   & lt; version> 3.6.0   & lt;/dependency>      

参数类         公开课OssParams {      公共静态最终弦端点=" oss-cn-hangzhou.aliyuncs.com ";   公共静态最终字符串accessKeyId=" ";   公共静态最终字符串accessKeySecret=" ";   公共静态最终字符串bucketName=" ";      公共静态最终字符串rootName=" ";//根目录   }      

工具类         进口com.aliyun.oss.ClientException;   进口com.aliyun.oss.OSS;   进口com.aliyun.oss.OSSClientBuilder;   进口com.aliyun.oss.OSSException;   进口com.aliyun.oss.model.AppendObjectRequest;   进口com.aliyun.oss.model.ObjectMetadata;   进口org.joda.time.DateTime;   进口org.slf4j.Logger;   进口org.slf4j.LoggerFactory;      进口java.io.ByteArrayInputStream;   进口java.net.URL;   进口java.util.Date;   进口java.util.concurrent.atomic.AtomicLong;      进口静态OssParams.bucketName;/* *   *先做单例对象调用,防止多线程并发错误   *后期加入线程锁控制后,做成公共跑龙套   */公开课WriteLeadsOssUtils {   私有静态日志记录器=LoggerFactory.getLogger (WriteLeadsOssUtils.class.getName ());      私有静态最终字符串fileSub=" . csv”;      私人AtomicLong AtomicLong=new AtomicLong l (0);      私人WriteLeadsOssUtils () {   }      私有静态类BuildWriteOSS {   私有静态最终WriteLeadsOssUtils实例=new WriteLeadsOssUtils ();   }      公共静态WriteLeadsOssUtils getInstance () {   返回BuildWriteOSS.instance;   }      私人OSS getOssClient () {   返回新OSSClientBuilder () .build (OssParams。端点,OssParams。accessKeyId OssParams.accessKeySecret);   }      公共URL writeJSONObjectFile(字符串内容,字符串文件名){//创建OSSClient实例。   OSS ossClient=getOssClient ();   尝试{   DateTime currentTime=new DateTime (System.currentTimeMillis ());//字符串=OssParams的objectName。rootName + currentTime.toString (“yyyy-MM-dd-HH”) + fileSub;   字符串=OssParams的objectName。rootName +文件名;//AppendObjectRequest AppendObjectRequest=零;   字符串数据=https://www.yisu.com/zixun/content;      ossClient。putObject (bucketName,对象名,新ByteArrayInputStream (content.getBytes ()));      日期过期=new日期(System.currentTimeMillis () + 3600 l * 1000 * 24 * 180);   URL=ossClient URL。generatePresignedUrl (bucketName objectName,过期);      LOG.info(“{}保存到OSS, url={}”, objectName, url.toString ());//(IngestLeadingRequest参数:参数){//字符串jsonStr=JSONObject.toJSONString(参数);//JSONObject对象=JSONObject.parseObject (jsonStr);//数据+=object.toJSONString () +“\ n”;//}//文件不存在//如果! ossClient.doesObjectExist (OssParams。bucketName objectName)) {//atomicLong.set l (0);//appendObjectRequest=getAppendObjectRequest(数据、真实对象名);//appendObjectRequest.setPosition l (0);//其他}{//appendObjectRequest=getAppendObjectRequest(数据、虚假objectName);//}//AppendObjectResult AppendObjectResult=ossClient.appendObject (appendObjectRequest);//atomicLong.set (appendObjectResult.getNextPosition ());//system . gc ();   返回的url;   }捕捉(OSSException e) {   e.printStackTrace ();   返回null;   }捕捉(ClientException e) {   e.printStackTrace ();   返回null;   最后}{   ossClient.shutdown ();   }   }/* *   *国旗标志位,真正的为新文件,假为追加文件   *   * @param数据   * @param国旗   * @param objectName   * @return   */私人AppendObjectRequest getAppendObjectRequest(字符串数据,布尔标志,字符串对象名){   ObjectMetadata元=new ObjectMetadata ();//指定上传的内容类型。   meta.setContentType (“text/平原;charset=utf - 8”);   如果(标志==true) {   返回新AppendObjectRequest (bucketName objectName,   新ByteArrayInputStream (data.getBytes()),元);   其他}{   返回新AppendObjectRequest (bucketName objectName,   新ByteArrayInputStream (data.getBytes())、元).withPosition (atomicLong.get ());   }   }   }

java利用oss实现下载功能