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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。