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: */ publicstaticList uploadMultipartFile(List fileList){ List filePaths=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: */ publicstaticList downloadMultipartFile(List urlList,Stringdir){ List files=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(List urlList,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; //} ////批量下载文件到指定位置 //List files=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{ //Map result=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: */ publicstaticMap uploadWithObjectName(Filefile){ if(file==null||!file.exists()){ log.error("阿里云上传文件失败【"+file+"】不存在"); returnnull; } Map map=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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。