本文实例为大家分享了如何利用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实现下载功能