springboot整合阿里云oss上传的方法示例
OSS申请和配置
1.注册登录
输入网址:https://www.aliyun.com/product/oss
如果没有账号点击免费注册,然后登录。
2.开通以及配置
点击立即开通
进入管理控制台
springboot整合使用
com.aliyun.oss aliyun-sdk-oss 2.8.3
oss.aliyun.accessKeyId=# oss.aliyun.accessKeySecret=# oss.aliyun.bucketName=mutest-qcby-oss oss.aliyun.endpoint=# oss.aliyun.pubFlag=false oss.aliyun.expiration=100 oss.aliyun.sslNmae=#内网使用,不必须
3.书写获取配置信息的java文件,建立properties包(导入依赖,否则无法识别这个包)
org.springframework.boot spring-boot-configuration-processor true
importcom.mbyte.easy.oss.OssUtil;
importlombok.Data;
importorg.springframework.boot.context.properties.ConfigurationProperties;
importorg.springframework.boot.context.properties.EnableConfigurationProperties;
importorg.springframework.context.annotation.PropertySource;
importorg.springframework.stereotype.Component;
importjavax.annotation.PostConstruct;
/**
*@ClassName:OssProerties
*@Description:阿里云对象云存储配置类
*@Author:zte
*@Date:2019-02-1409:37
*@Version1.0
**/
@Data
@Component
@ConfigurationProperties(prefix="oss.aliyun")
publicclassOssProerties{
privateStringaccessKeyId;
privateStringaccessKeySecret;
privateStringbucketName;
privateStringendpoint;
privateStringbucket;
privatebooleanpubFlag;
privateStringsslNmae;
@PostConstruct
publicvoidinit(){
//Oss工具类配置初始化
OssUtil.initConfig(this);
}
//过期时间
privateintexpiration;
publicStringgetAccessKeyId(){
returnaccessKeyId;
}
publicOssProertiessetAccessKeyId(StringaccessKeyId){
this.accessKeyId=accessKeyId;
returnthis;
}
publicStringgetAccessKeySecret(){
returnaccessKeySecret;
}
publicOssProertiessetAccessKeySecret(StringaccessKeySecret){
this.accessKeySecret=accessKeySecret;
returnthis;
}
publicStringgetBucketName(){
returnbucketName;
}
publicOssProertiessetBucketName(StringbucketName){
this.bucketName=bucketName;
returnthis;
}
publicStringgetEndpoint(){
returnendpoint;
}
publicOssProertiessetEndpoint(Stringendpoint){
this.endpoint=endpoint;
returnthis;
}
publicStringgetBucket(){
returnbucket;
}
publicOssProertiessetBucket(Stringbucket){
this.bucket=bucket;
returnthis;
}
publicbooleanisPubFlag(){
returnpubFlag;
}
publicvoidsetPubFlag(booleanpubFlag){
this.pubFlag=pubFlag;
}
publicintgetExpiration(){
returnexpiration;
}
publicOssProertiessetExpiration(intexpiration){
this.expiration=expiration;
returnthis;
}
@Override
publicStringtoString(){
return"OssPro{"+
"accessKeyId='"+accessKeyId+'\''+
",accessKeySecret='"+accessKeySecret+'\''+
",bucketName='"+bucketName+'\''+
",endpoint='"+endpoint+'\''+
",bucket='"+bucket+'\''+
",expiration="+expiration+
'}';
}
}
4.整合oss,书写相关java文件
1.文件常量java文件FileConstants.java
packagecom.mbyte.easy.oss;
importorg.springframework.util.ClassUtils;
importjava.io.File;
/**
*@ClassName:FileConstants
*@Description:文件常量
*@Author:lxt
*@Date:2019-02-1909:59
*@Version1.0
**/
publicclassFileConstants{
/**
*文件存储临时文件夹
*/
publicfinalstaticStringTEMP_ROOT="temp";
/**
*下载暂存目录
*/
publicfinalstaticStringDOWNLOAD=TEMP_ROOT+File.separator+"download";
/**
*后缀名相关常量(包含【.】)
*/
publicfinalstaticStringSUFFIX_ZIP=".zip";
/**
*png图片后缀
*/
publicfinalstaticStringSUFFIX_png=".png";
/**
*二维码暂存路径eg:微信支付二维码
*/
publicstaticfinalStringQRCODE="qrcode";
publicstaticfinalStringQRCODE_PATH=ClassUtils.getDefaultClassLoader().getResource("static").getPath()+File.separator+QRCODE;
/**
*文件的后缀名
*/
publicstaticfinalStringFILE_TYPE_AVI="avi";
publicstaticfinalStringFILE_TYPE_CSV="csv";
publicstaticfinalStringFILE_TYPE_DOC="doc";
publicstaticfinalStringFILE_TYPE_DOCX="docx";
publicstaticfinalStringFILE_TYPE_MP3="mp3";
publicstaticfinalStringFILE_TYPE_PDF="pdf";
publicstaticfinalStringFILE_TYPE_PPT="ppt";
publicstaticfinalStringFILE_TYPE_PPTX="pptx";
publicstaticfinalStringFILE_TYPE_RAR="rar";
publicstaticfinalStringFILE_TYPE_TXT="txt";
publicstaticfinalStringFILE_TYPE_XLS="xls";
publicstaticfinalStringFILE_TYPE_ZIP="zip";
/**
*文件对应图片的oss路径
*/
publicstaticfinalStringFILE_TYPE_AVI_ROUTE="https://hmett.oss-cn-beijing.aliyuncs.com/20191205092751242.U27AJS.png?Expires=4731182871&OSSAccessKeyId=LTAI4FqUE3bJs9FK7Sj65JnM&Signature=0S4nIClHiI11Iw2SOnLoKuwpiDc%3D";
publicstaticfinalStringFILE_TYPE_CSV_ROUTE="https://hmett.oss-cn-beijing.aliyuncs.com/20191205092859378.A0J8R6.png?Expires=4731182939&OSSAccessKeyId=LTAI4FqUE3bJs9FK7Sj65JnM&Signature=McS77A%2BMOkmSjBfZziIxLeR5QCM%3D";
publicstaticfinalStringFILE_TYPE_DOC_ROUTE="https://hmett.oss-cn-beijing.aliyuncs.com/20191205092908602.QHFWCO.png?Expires=4731182949&OSSAccessKeyId=LTAI4FqUE3bJs9FK7Sj65JnM&Signature=%2Fr9V%2FP8nmfYKVbANe2fl1qR%2FFwg%3D";
publicstaticfinalStringFILE_TYPE_DOCX_ROUTE="https://hmett.oss-cn-beijing.aliyuncs.com/20191205092908602.QHFWCO.png?Expires=4731182949&OSSAccessKeyId=LTAI4FqUE3bJs9FK7Sj65JnM&Signature=%2Fr9V%2FP8nmfYKVbANe2fl1qR%2FFwg%3D";
publicstaticfinalStringFILE_TYPE_MP3_ROUTE="https://hmett.oss-cn-beijing.aliyuncs.com/20191205092920411.L5CBAF.png?Expires=4731182960&OSSAccessKeyId=LTAI4FqUE3bJs9FK7Sj65JnM&Signature=wPz2ylPAg%2FpBqyIz4LztacVfRwo%3D";
publicstaticfinalStringFILE_TYPE_PDF_ROUTE="https://hmett.oss-cn-beijing.aliyuncs.com/20191205092930146.CU0CAD.png?Expires=4731182970&OSSAccessKeyId=LTAI4FqUE3bJs9FK7Sj65JnM&Signature=Nwl6%2BkZmosARipe%2BoVJT3FdRLqM%3D";
publicstaticfinalStringFILE_TYPE_PPT_ROUTE="https://hmett.oss-cn-beijing.aliyuncs.com/20191205092939365.XHOX9G.png?Expires=4731182979&OSSAccessKeyId=LTAI4FqUE3bJs9FK7Sj65JnM&Signature=3CDxl0W5ymVXe2XLnxLn1ewc1gU%3D";
publicstaticfinalStringFILE_TYPE_PPTX_ROUTE="https://hmett.oss-cn-beijing.aliyuncs.com/20191205092939365.XHOX9G.png?Expires=4731182979&OSSAccessKeyId=LTAI4FqUE3bJs9FK7Sj65JnM&Signature=3CDxl0W5ymVXe2XLnxLn1ewc1gU%3D";
publicstaticfinalStringFILE_TYPE_RAR_ROUTE="https://hmett.oss-cn-beijing.aliyuncs.com/20191205092949684.9OW7L9.png?Expires=4731182989&OSSAccessKeyId=LTAI4FqUE3bJs9FK7Sj65JnM&Signature=RCKarsekmPG3CXI5D6MLpJ4ocj4%3D";
publicstaticfinalStringFILE_TYPE_TXT_ROUTE="https://hmett.oss-cn-beijing.aliyuncs.com/20191205092959887.TF1K0N.png?Expires=4731183000&OSSAccessKeyId=LTAI4FqUE3bJs9FK7Sj65JnM&Signature=9l44IQ0FZdQMcRq92PPOXlBKEFk%3D";
publicstaticfinalStringFILE_TYPE_XLS_ROUTE="https://hmett.oss-cn-beijing.aliyuncs.com/20191205093007830.M6O08Z.png?Expires=4731183008&OSSAccessKeyId=LTAI4FqUE3bJs9FK7Sj65JnM&Signature=GeNmvgi7TGMq3uk9AG0%2BJRWRFY0%3D";
publicstaticfinalStringFILE_TYPE_ZIP_ROUTE="https://hmett.oss-cn-beijing.aliyuncs.com/20191205093017998.Q39L45.png?Expires=4731183018&OSSAccessKeyId=LTAI4FqUE3bJs9FK7Sj65JnM&Signature=djzJ7rTgH8LvCeaMfWGXUAQIpJE%3D";
}
2.文件操作工具类OssFileUtils.java
importcom.mbyte.easy.common.web.AjaxResult;
importcom.mbyte.easy.oss.OssUtil;
importlombok.extern.slf4j.Slf4j;
importorg.apache.commons.lang3.StringUtils;
importorg.slf4j.Logger;
importorg.slf4j.LoggerFactory;
importorg.springframework.web.multipart.MultipartFile;
importjava.io.File;
importjava.io.IOException;
importjava.io.InputStream;
importjava.net.URL;
importjava.nio.file.Files;
importjava.nio.file.Path;
importjava.nio.file.Paths;
importjava.nio.file.StandardCopyOption;
importjava.util.*;
/**
*@ClassName:DesignFileUtils
*@Description:文件操作工具类
*@Author:lxt
*@Date:2019-02-1514:50
*@Version1.0
**/
@Slf4j
publicclassOssFileUtils{
/**
*@Title:uploadSingleFile
*@Description:单个文件上传
*@Author:zte
*@param:file
*@Date:2019-02-1514:56
*@return:java.lang.String成功返回文件路径,失败返回null
*@throws:
*/
publicstaticStringuploadSingleFile(MultipartFilefile){
if(file==null){
log.error("单文件上传失败,文件为空");
returnnull;
}
try{
returnOssUtil.upload(OssUtil.generateKey(file.getOriginalFilename()),file.getBytes());
}catch(Exceptione){
log.error("单文件上传异常【"+file+"】",e);
}
returnnull;
}
/**
*@Title:uploadSingleFile
*@Description:单个文件上传
*@Author:lxt
*@param:file
*@Date:2019-02-1514:56
*@return:java.lang.String成功返回文件路径,失败返回null
*@throws:
*/
publicstaticStringuploadSingleFile(Filefile){
if(file==null){
log.error("单文件上传失败,文件为空");
returnnull;
}
try{
returnOssUtil.upload(OssUtil.generateKey(file.getName()),file);
}catch(Exceptione){
log.error("单文件上传异常【"+file+"】",e);
}
returnnull;
}
/**
*@Title:uploadMultipartFile
*@Description:多文件文件上传
*@Author:zte
*@param:files
*@Date:2019-02-1813:08
*@return:java.util.List成功返回文件路径集合,失败返回null
*@throws:
*/
publicstaticListuploadMultipartFile(ListfileList){
ListfilePaths=newArrayList<>();
Optional.ofNullable(fileList).ifPresent(fl->{
fl.stream().forEach(f->{
try{
filePaths.add(OssUtil.upload(OssUtil.generateKey(f.getOriginalFilename()),f.getBytes()));
}catch(IOExceptione){
log.error("多文件上传异常【"+f+"】",e);
}
});
}
);
returnfilePaths;
}
/**
*@Title:downloadSingleFileByOss
*@Description:下载阿里云文件到本地
*@Author:lxt
*@param:url阿里云链接
*@param:filePath下载目录
*@Date:2019-02-1813:13
*@return:java.io.File
*@throws:
*/
publicstaticFiledownloadSingleFile(Stringurl,StringfilePath){
try{
returnOssUtil.download2File(url,filePath);
}catch(Exceptione){
log.error("单文件下载异常【"+url+"】",e);
}
returnnull;
}
/**
*@Title:downloadMultipartFileByOss
*@Description:批量下载阿里云文件到本地
*@Author:zte
*@param:urlList阿里云链接集合
*@param:dir下载目录
*@Date:2019-02-1813:19
*@return:java.util.List
*@throws:
*/
publicstaticListdownloadMultipartFile(ListurlList,Stringdir){
Listfiles=newArrayList<>();
Optional.ofNullable(urlList).ifPresent(fl->{
fl.stream().forEach(f->files.add(OssUtil.download2Dir(f,dir)));
}
);
returnfiles;
}
/**
*@Title:downloadMultipartFileByOssWithZip
*@Description:批量下载,打包成一个zip包
*@Author:zte
*@param:urlList
*@param:zipPath
*@Date:2019-02-1815:41
*@return:java.io.File
*@throws:
*/
//publicstaticFiledownloadMultipartFileWithZip(ListurlList,StringzipName){
//try{
////压缩路径不存在,先创建
//FilezipDirFile=newFile(FileConstants.DOWNLOAD);
//if(!zipDirFile.exists()){
//zipDirFile.mkdirs();
//}
//if(StringUtils.isNoneBlank(zipName)&&!isFileBySuffix(zipName,FileConstants.SUFFIX_ZIP)){
////文件名称存在但后缀名不是zip
//zipName=zipName+FileConstants.SUFFIX_ZIP;
//}else{
////压缩包默认名称未6为随机字符串
//zipName=StringUtils.isBlank(zipName)?Utility.getRandomStrByNum(6)+FileConstants.SUFFIX_ZIP:zipName;
//}
////批量下载文件到指定位置
//Listfiles=downloadMultipartFile(urlList,FileConstants.DOWNLOAD);
////将文件打包
//FilezipFile=ZipFileUtil.compressFiles2Zip(files,FileConstants.DOWNLOAD+File.separator+zipName);
////删除打包之前的文件
//files.stream().forEach(f->f.delete());
//returnzipFile;
//}catch(Exceptione){
//logger.error("批量下载文件异常",e);
//}
//returnnull;
//}
/**
*@Title:isFileBySuffix
*@Description:通过后缀名判断是否是某种文件
*@Author:zte
*@param:fileName文件名称
*@param:suffix后缀名
*@Date:2019-02-1910:09
*@return:boolean
*@throws:
*/
publicstaticbooleanisFileBySuffix(StringfileName,Stringsuffix){
if(StringUtils.isNoneBlank(fileName)&&StringUtils.isNoneBlank(suffix)){
returnfileName.endsWith(suffix.toLowerCase())||fileName.endsWith(suffix.toUpperCase());
}
returnfalse;
}
/**
*@Title:downloadByUrlPath
*@Description:下载网络文件
*@Author:lxt
*@param:urlPath
*@param:saveDir
*@param:fileName
*@Date:2019-02-2316:26
*@return:java.io.File
*@throws:
*/
publicstaticFiledownloadByUrlPath(StringurlPath,StringsaveDir,StringfileName){
if(StringUtils.isBlank(urlPath)){
log.error("下载网络文件失败,链接为空");
returnnull;
}
try(InputStreamins=newURL(urlPath).openStream()){
Pathtarget=Paths.get(saveDir,fileName);
Files.createDirectories(target.getParent());
Files.copy(ins,target,StandardCopyOption.REPLACE_EXISTING);
returnnewFile(saveDir+File.separator+fileName);
}catch(IOExceptione){
log.error("下载网络文件异常",e);
}
returnnull;
}
///**
//*@Description:上传视频文件
//*@paramfile
//*@paramtype
//*@return:com.mbyte.easy.common.web.AjaxResult
//*@Author:zte
//*@Date:2020/3/2317:48
//*/
//publicstaticAjaxResultuploadVideoFile(MultipartFilefile,Stringtype){
//if(file!=null){
//FilepartFile=null;
//FilecompressFile=null;
//try{
//Mapresult=newHashMap<>();
////压缩视频
//if(VideoDetailConstants.VIDEO_W_FLAG.equals(type)){
//compressFile=FfmpegUtil.INSTANCE.compressFile2W(file);
//}
//if(VideoDetailConstants.VIDEO_H_FLAG.equals(type)){
//compressFile=FfmpegUtil.INSTANCE.compressFile2H(file);
//}
//StringfileUrlPath=null;
//if(compressFile!=null){
//fileUrlPath=OssFileUtils.uploadSingleFile(compressFile);
////剪辑视频
//partFile=FfmpegUtil.INSTANCE.getPartVideo(compressFile);
//}else{
//fileUrlPath=OssFileUtils.uploadSingleFile(file);
////剪辑视频
//partFile=FfmpegUtil.INSTANCE.getPartVideo(file);
//}
////上传视频本身到oss
//result.put("video",fileUrlPath);
////上传试看部分到oss
//result.put("videoPart",OssFileUtils.uploadSingleFile(partFile));
//returnAjaxResult.success(result);
//}catch(Exceptione){
//log.error("上传视频异常",e);
//}finally{
//if(partFile!=null&&partFile.exists()){
//partFile.delete();
//}
//if(compressFile!=null&&compressFile.exists()){
//compressFile.delete();
//}
//}
//}
//returnAjaxResult.error();
//}
}
3.阿里云对象云存储工具类OssUtil.java
importcom.aliyun.oss.OSS;
importcom.aliyun.oss.OSSClient;
importcom.aliyun.oss.model.GetObjectRequest;
importcom.aliyun.oss.model.OSSObject;
importcom.mbyte.easy.properties.OssProerties;
importcom.mbyte.easy.util.Utility;
importlombok.extern.slf4j.Slf4j;
importorg.apache.commons.io.FilenameUtils;
importorg.apache.commons.lang3.StringUtils;
importorg.apache.commons.lang3.time.DateFormatUtils;
importorg.apache.commons.lang3.time.DateUtils;
importorg.apache.logging.log4j.util.Strings;
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.web.multipart.MultipartFile;
importjavax.servlet.http.HttpServletResponse;
importjava.io.*;
importjava.net.URLEncoder;
importjava.util.Date;
importjava.util.HashMap;
importjava.util.Map;
/**
*@ClassName:OSSUtill
*@Description:阿里云对象云存储工具类
*@Author:zte
*@Date:2019-02-1314:38
*@Version1.0
**/
@Slf4j
publicclassOssUtil{
/**
*注入配置
*/
privatestaticOssProertiesossProerties;
/**
*@Title:initConfig
*@Description:配置初始化
*@Author:lxt
*@param:ossProertiesInit
*@Date:2019-02-1409:25
*@throws:
*/
publicstaticvoidinitConfig(OssProertiesossProertiesInit){
ossProerties=ossProertiesInit;
}
/**
*@Title:generateKey
*@Description:生成oss对象名称
*@Author:lxt
*@param:fileName
*@Date:2019-02-1315:21
*@return:java.lang.String
*@throws:
*/
publicstaticStringgenerateKey(StringfileName){
//对象名称格式:yyyymm.name.6位随机字符.ext
returnnewStringBuilder(DateFormatUtils.format(newDate(),"yyyyMMddHHmmssSSS"))
.append(".").append(Utility.getRandomStrByNum(6))
.append(".").append(FilenameUtils.getExtension(fileName))
.toString();
}
publicstaticStringgetHttpsAddress(Stringurl){
returnurl.replaceAll("http://"+ossProerties.getBucket(),ossProerties.getSslNmae());
}
/**
*@Title:upload
*@Description:上传方法
*@Author:zte
*@param:key对象名称
*@param:file待上传文件
*@Date:2019-02-1315:35
*@return:java.lang.String
*@throws:
*/
publicstaticStringupload(Stringkey,Filefile){
if(file==null||!file.exists()){
log.error("阿里云上传文件失败【"+file+"】不存在");
returnnull;
}
log.info("阿里云上传文件开始:【"+file+"】");
OSSossClient=newOSSClient(ossProerties.getEndpoint(),ossProerties.getAccessKeyId(),ossProerties.getAccessKeySecret());
try{
ossClient.putObject(ossProerties.getBucketName(),key,file);
//设置url过期时间
DateexpirationDate=DateUtils.addYears(newDate(),ossProerties.getExpiration());
Stringurl=ossClient.generatePresignedUrl(ossProerties.getBucketName(),key,expirationDate).toString();
log.info("阿里云上传文件结束:【"+file+"】=>【"+url+"】");
returngetHttpsAddress(url);
}catch(Exceptione){
log.error("阿里云上传文件异常【"+file+"】",e);
}finally{
ossClient.shutdown();
}
returnnull;
}
/**
*@Title:upload
*@Description:上传方法
*@Author:zte
*@param:key对象名称
*@param:file待上传文件
*@Date:2019-02-1315:35
*@return:java.lang.String
*@throws:
*/
publicstaticStringupload(Stringkey,byte[]bytes){
if(bytes==null||StringUtils.isBlank(key)){
log.error("阿里云上传文件不存在:【"+key+"】");
returnnull;
}
log.info("阿里云上传文件开始:【"+key+"】");
OSSossClient=newOSSClient(ossProerties.getEndpoint(),ossProerties.getAccessKeyId(),ossProerties.getAccessKeySecret());
try{
ossClient.putObject(ossProerties.getBucketName(),key,newByteArrayInputStream(bytes));
//设置url过期时间
DateexpirationDate=DateUtils.addYears(newDate(),100);
Stringurl=ossClient.generatePresignedUrl(ossProerties.getBucketName(),key,expirationDate).toString();
log.info("阿里云上传文件结束:【"+key+"】=>【"+url+"】");
returngetHttpsAddress(url);
}catch(Exceptione){
log.error("阿里云上传文件异常:【"+key+"】",e);
}finally{
ossClient.shutdown();
}
returnnull;
}
/**
*@Title:uploadWithObjectName
*@Description:上传方法,返回对象名称和url
*@Author:zte
*@param:file待上传文件
*@Date:2019-02-1315:35
*@return:java.lang.Map
*@throws:
*/
publicstaticMapuploadWithObjectName(Filefile){
if(file==null||!file.exists()){
log.error("阿里云上传文件失败【"+file+"】不存在");
returnnull;
}
Mapmap=newHashMap<>();
log.info("阿里云上传文件开始:【"+file+"】");
OSSossClient=newOSSClient(ossProerties.getEndpoint(),ossProerties.getAccessKeyId(),ossProerties.getAccessKeySecret());
try{
Stringkey=generateKey(file.getName());
ossClient.putObject(ossProerties.getBucketName(),key,newFileInputStream(file));
//设置url过期时间
DateexpirationDate=DateUtils.addYears(newDate(),ossProerties.getExpiration());
Stringurl=ossClient.generatePresignedUrl(ossProerties.getBucketName(),key,expirationDate).toString();
log.info("阿里云上传文件结束:【"+file+"】=>【"+url+"】");
map.put("objectName",key);
map.put("url",url);
returnmap;
}catch(Exceptione){
log.error("阿里云上传文件异常【"+file+"】",e);
}finally{
ossClient.shutdown();
}
returnnull;
}
/**
*@Title:delete
*@Description:删除方法
*@Author:zte
*@param:url待删除对象url
*@Date:2019-02-1315:54
*@throws:
*/
publicstaticvoiddelete(Stringurl){
if(StringUtils.isBlank(url)){
log.error("阿里云删除文件失败,对象url为空");
return;
}
log.info("阿里云删除文件开始:【"+url+"】");
if(url.contains(ossProerties.getBucket())){
//根据url获取对象名称
url=getObjectNameByUrl(url);
}
OSSossClient=newOSSClient(ossProerties.getEndpoint(),ossProerties.getAccessKeyId(),ossProerties.getAccessKeySecret());
try{
//删除文件
ossClient.deleteObject(ossProerties.getBucketName(),url);
log.info("阿里云删除文件结束:【"+url+"】");
}catch(Exceptione){
log.error("阿里云删除文件异常【"+url+"】",e);
}finally{
ossClient.shutdown();
}
}
/**
*@Title:download
*@Description:下载文件到本地文件
*@Author:zte
*@param:url待下载对象url
*@param:filePath下载到本地文件
*@Date:2019-02-1315:56
*@return:java.io.File
*@throws:
*/
publicstaticFiledownload2File(Stringurl,StringfilePath){
log.info("阿里云下载文件开始:【"+url+"】");
if(url.contains(ossProerties.getBucket())){
//根据url获取对象名称
url=getObjectNameByUrl(url);
}
OSSossClient=newOSSClient(ossProerties.getEndpoint(),ossProerties.getAccessKeyId(),ossProerties.getAccessKeySecret());
try{
Filefile=newFile(filePath);
//下载OSS文件到本地文件。如果指定的本地文件存在会覆盖,不存在则新建。
ossClient.getObject(newGetObjectRequest(ossProerties.getBucketName(),url),file);
log.info("阿里云下载文件结束:【"+url+"】");
returnfile;
}catch(Exceptione){
log.error("阿里云下载文件异常【"+url+"】",e);
}finally{
ossClient.shutdown();
}
returnnull;
}
/**
*@Title:download
*@Description:通过流下载文件
*@Author:zte
*@param:url待下载对象url
*@param:filePath下载到本地文件
*@Date:2019-02-1315:56
*@return:java.io.File
*@throws:
*/
publicstaticvoiddownload2FileByStream(Stringurl,StringfileName,HttpServletResponseresponse){
BufferedInputStreaminputStream=null;
OSSossClient=newOSSClient(ossProerties.getEndpoint(),ossProerties.getAccessKeyId(),ossProerties.getAccessKeySecret());
try(
BufferedOutputStreamoutputStream=newBufferedOutputStream(response.getOutputStream());){
//配置文件下载
response.setHeader("content-type","application/octet-stream");
response.setContentType("application/octet-stream");
if(url.contains(ossProerties.getBucket())){
//根据url获取对象名称
url=getObjectNameByUrl(url);
}
//下载文件能正常显示中文
response.setHeader("Content-Disposition","attachment;filename="+URLEncoder.encode(StringUtils.isBlank(fileName)?url:fileName,"UTF-8"));
log.info("阿里云下载文件开始:【"+url+"】");
//ossObject包含文件所在的存储空间名称、文件名称、文件元信息以及一个输入流。
OSSObjectossObject=ossClient.getObject(ossProerties.getBucketName(),url);
inputStream=newBufferedInputStream(ossObject.getObjectContent());
byte[]buff=newbyte[2048];
intbytesRead;
while(-1!=(bytesRead=inputStream.read(buff,0,buff.length))){
outputStream.write(buff,0,bytesRead);
}
outputStream.flush();
}catch(Exceptione){
log.error("下载异常!",e);
}finally{
log.info("阿里云下载文件结束:【"+url+"】");
ossClient.shutdown();
if(inputStream!=null){
try{
inputStream.close();
}catch(IOExceptione){
e.printStackTrace();
}
}
}
}
/**
*@Title:download
*@Description:下载文件到指定目录,文件名称为阿里云文件对象名称
*@Author:zte
*@param:url待下载对象url
*@param:dir下载到本地目录
*@Date:2019-02-1315:56
*@return:java.io.File
*@throws:
*/
publicstaticFiledownload2Dir(Stringurl,Stringdir){
log.info("阿里云下载文件开始:【"+url+"】");
if(url.contains(ossProerties.getBucket())){
//根据url获取对象名称
url=getObjectNameByUrl(url);
}
OSSossClient=newOSSClient(ossProerties.getEndpoint(),ossProerties.getAccessKeyId(),ossProerties.getAccessKeySecret());
try{
Filefile=newFile(dir+File.separator+url);
//下载OSS文件到本地文件。如果指定的本地文件存在会覆盖,不存在则新建。
ossClient.getObject(newGetObjectRequest(ossProerties.getBucketName(),url),file);
log.info("阿里云下载文件结束:【"+url+"】");
returnfile;
}catch(Exceptione){
log.error("阿里云下载文件异常【"+url+"】",e);
}finally{
ossClient.shutdown();
}
returnnull;
}
/*
*@Title:getObjectNameByUrl
*@Description:通过url获取对象名称
*@Author:lxt
*@param:url
*@Date:2019-02-1316:20
*@return:java.lang.String
*@throws:
*/
publicstaticStringgetObjectNameByUrl(Stringurl){
if(StringUtils.isBlank(url)){
returnnull;
}
returnurl.substring(url.indexOf(ossProerties.getBucket())+ossProerties.getBucket().length()+1,url.indexOf("?"));
}
/**
*@author:zte
*@description:重载方法,根据file生成文件名称并且上传文件到阿里云
*@date:2019/9/2110:56
*@paramfile:MultipartFile文件
*@see#upload(String,byte[])
*@return数据库中要存入的路径
*/
publicstaticStringupload(MultipartFilefile)throwsIOException{
if(file==null||Strings.isEmpty(file.getOriginalFilename())){
returnnull;
}
returnupload(generateKey(file.getOriginalFilename()),file.getBytes());
}
/**
*调用浏览器下载
*@paramurl
*@paramresponse
*/
publicstaticvoiddownload2FileByStream(Stringurl,HttpServletResponseresponse,Stringname){
Filefile=newFile(url);
StringfileName=file.getName();
fileName=StringUtils.substringBefore(fileName,"?");
StringfileLast=StringUtils.substringAfterLast(fileName,".");
fileName=name+"."+fileLast;
BufferedInputStreaminputStream=null;
OSSossClient=newOSSClient(ossProerties.getEndpoint(),ossProerties.getAccessKeyId(),ossProerties.getAccessKeySecret());
try(
BufferedOutputStreamoutputStream=newBufferedOutputStream(response.getOutputStream());){
//配置文件下载
response.setHeader("content-type","application/octet-stream");
response.setContentType("application/octet-stream");
if(url.contains(ossProerties.getBucket())){
//根据url获取对象名称
url=getObjectNameByUrl(url);
}
//下载文件能正常显示中文
response.setHeader("Content-Disposition","attachment;filename="+URLEncoder.encode(StringUtils.isBlank(fileName)?url:fileName,"UTF-8"));
log.info("阿里云下载文件开始:【"+url+"】");
//ossObject包含文件所在的存储空间名称、文件名称、文件元信息以及一个输入流。
OSSObjectossObject=ossClient.getObject(ossProerties.getBucketName(),url);
inputStream=newBufferedInputStream(ossObject.getObjectContent());
byte[]buff=newbyte[2048];
intbytesRead;
while(-1!=(bytesRead=inputStream.read(buff,0,buff.length))){
outputStream.write(buff,0,bytesRead);
}
outputStream.flush();
}catch(Exceptione){
log.error("下载异常!",e);
}finally{
log.info("阿里云下载文件结束:【"+url+"】");
ossClient.shutdown();
if(inputStream!=null){
try{
inputStream.close();
}catch(IOExceptione){
e.printStackTrace();
}
}
}
}
}
5.controller调用样例
我这里使用的是我自己项目封装的AjaxResult工具类,大家可以使用Map,通过这个方法呢,我们就可以使用oss将图片保存,并且返回前端图片的保存地址(可以访问)。
/**
*上传
*@paramfileupload
*@return
*/
@PostMapping("uploadImg")
@ResponseBody
publicAjaxResultuploadImg(MultipartFilefileupload){
if(fileupload!=null){
Stringpath=OssFileUtils.uploadSingleFile(fileupload);
returnAjaxResult.success(path);
}else{
returnAjaxResult.error();
}
}
到此这篇关于springboot整合阿里云oss上传的方法示例的文章就介绍到这了,更多相关springboot整合阿里云oss上传内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。