java利用oss实现下载功能
本文实例为大家分享了如何利用oss实现下载功能的具体代码,供大家参考,具体内容如下
目前我接触的实现下载功能有3种方式。第一种,就是把要下载的内容写到本地目录,然后把目录返回给前端,利用a标签下载。第二种,本地不允许访问,挂载目录,使目录可以对外访问,同样的,把目录返给前端下载。第三种,使用第三方存储,其中阿里云oss就是一种可以用来实现的对象存储。
首先,导入依赖包
com.aliyun.oss aliyun-sdk-oss 3.6.0
参数类
publicclassOssParams{ publicstaticfinalStringendpoint="oss-cn-hangzhou.aliyuncs.com"; publicstaticfinalStringaccessKeyId=""; publicstaticfinalStringaccessKeySecret=""; publicstaticfinalStringbucketName=""; publicstaticfinalStringrootName="";//根目录 }
工具类
importcom.aliyun.oss.ClientException; importcom.aliyun.oss.OSS; importcom.aliyun.oss.OSSClientBuilder; importcom.aliyun.oss.OSSException; importcom.aliyun.oss.model.AppendObjectRequest; importcom.aliyun.oss.model.ObjectMetadata; importorg.joda.time.DateTime; importorg.slf4j.Logger; importorg.slf4j.LoggerFactory; importjava.io.ByteArrayInputStream; importjava.net.URL; importjava.util.Date; importjava.util.concurrent.atomic.AtomicLong; importstaticOssParams.bucketName; /** *先做单例对象调用,防止多线程并发bug *后期加入线程锁控制后,做成公共utils */ publicclassWriteLeadsOssUtils{ privatestaticLoggerLOG=LoggerFactory.getLogger(WriteLeadsOssUtils.class.getName()); privatestaticfinalStringfileSub=".csv"; privateAtomicLongatomicLong=newAtomicLong(0L); privateWriteLeadsOssUtils(){ } privatestaticclassBuildWriteOSS{ privatestaticfinalWriteLeadsOssUtilsinstance=newWriteLeadsOssUtils(); } publicstaticWriteLeadsOssUtilsgetInstance(){ returnBuildWriteOSS.instance; } privateOSSgetOssClient(){ returnnewOSSClientBuilder().build(OssParams.endpoint,OssParams.accessKeyId,OssParams.accessKeySecret); } publicURLwriteJSONObjectFile(Stringcontent,StringfileName){ //创建OSSClient实例。 OSSossClient=getOssClient(); try{ DateTimecurrentTime=newDateTime(System.currentTimeMillis()); //StringobjectName=OssParams.rootName+currentTime.toString("yyyy-MM-dd-HH")+fileSub; StringobjectName=OssParams.rootName+fileName; //AppendObjectRequestappendObjectRequest=null; Stringdata=content; ossClient.putObject(bucketName,objectName,newByteArrayInputStream(content.getBytes())); Dateexpiration=newDate(System.currentTimeMillis()+3600L*1000*24*180); URLurl=ossClient.generatePresignedUrl(bucketName,objectName,expiration); LOG.info("{}savedtoOSS,url={}",objectName,url.toString()); //for(IngestLeadingRequestparam:params){ //StringjsonStr=JSONObject.toJSONString(param); //JSONObjectobject=JSONObject.parseObject(jsonStr); //data+=object.toJSONString()+"\n"; //} //文件不存在 //if(!ossClient.doesObjectExist(OssParams.bucketName,objectName)){ //atomicLong.set(0L); //appendObjectRequest=getAppendObjectRequest(data,true,objectName); //appendObjectRequest.setPosition(0L); //}else{ //appendObjectRequest=getAppendObjectRequest(data,false,objectName); //} //AppendObjectResultappendObjectResult=ossClient.appendObject(appendObjectRequest); //atomicLong.set(appendObjectResult.getNextPosition()); //System.gc(); returnurl; }catch(OSSExceptione){ e.printStackTrace(); returnnull; }catch(ClientExceptione){ e.printStackTrace(); returnnull; }finally{ ossClient.shutdown(); } } /** *flag标志位,true为新文件,false为追加文件 * *@paramdata *@paramflag *@paramobjectName *@return */ privateAppendObjectRequestgetAppendObjectRequest(Stringdata,Booleanflag,StringobjectName){ ObjectMetadatameta=newObjectMetadata(); //指定上传的内容类型。 meta.setContentType("text/plain;charset=utf-8"); if(flag==true){ returnnewAppendObjectRequest(bucketName,objectName, newByteArrayInputStream(data.getBytes()),meta); }else{ returnnewAppendObjectRequest(bucketName,objectName, newByteArrayInputStream(data.getBytes()),meta).withPosition(atomicLong.get()); } } }
调用方法
WriteLeadsOssUtils.getInstance().writeJSONObjectFile("hello"); //将hello作为内容存入oss,并获得可以下载的url
利用上述方式,可以直接将可以下载的url返回给前端,直接用窗口打开就可以下载。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。