SpringBoot整合阿里云OSS 实现各种文件上传下载查看 (阿里云配置OSS以及postman测试)

您所在的位置:网站首页 springboot图片上传下载 SpringBoot整合阿里云OSS 实现各种文件上传下载查看 (阿里云配置OSS以及postman测试)

SpringBoot整合阿里云OSS 实现各种文件上传下载查看 (阿里云配置OSS以及postman测试)

2023-07-24 17:21| 来源: 网络整理| 查看: 265

模仿着大佬博客做的https://blog.csdn.net/weixin_42370891/article/details/99102508

一、配置maven

aliyin oss是核心其他的是用到的工具包

joda-time joda-time 2.9.9 org.apache.commons commons-lang3 3.8.1 com.aliyun.oss aliyun-sdk-oss 3.6.0 org.projectlombok lombok 1.18.20 二、阿里云OSS配置和yml文件 配置OSS

在这里插入图片描述 创建Bucket以后设置AccessKey进行验证 在这里插入图片描述 在这里插入图片描述 可以自己传图片测试一下(好像默认访问图片路径会下载 能下载应该也算上传成功了)

配置application.yml # 阿里云oss配置 aliyun: oss: endpoint: oss-cn-shanghai.aliyuncs.com accessKeyId: accessKeySecret: bucketname: urlPrefix:

endpoint urlPrefix 在这里插入图片描述

accessKeyId accessKeySecret 就是识别身份的 不能外露 在这里插入图片描述 bucketname就是之前设置的Bucket的名称

二、编写Spring Boot Config类 import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClient; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; /** * @Author: ahui * @date: 2021/12/14 - 14:31 */ @Configuration @PropertySource(value = {"classpath:application.yml"}) @ConfigurationProperties(prefix = "aliyun.oss") @Data public class AliyunConfig { private String endpoint; private String accessKeyId; private String accessKeySecret; private String bucketName; private String urlPrefix; @Bean public OSS oSSClient() { return new OSSClient(endpoint, accessKeyId, accessKeySecret); } } 配置返回结果FileUploadResult import lombok.Data; /** * @Author: ahui * @date: 2021/12/14 - 14:55 */ @Data public class FileUploadResult { // 文件唯一标识 private String uid; // 文件名 private String name; // 状态有:uploading done error removed private String status; // 服务端响应内容,如:'{"status": "success"}' private String response; } Service层

注意别导错包

import com.ahui.canteen.config.AliyunConfig; import com.ahui.canteen.vo.FileUploadResult; import com.aliyun.oss.OSS; import com.aliyun.oss.model.ListObjectsRequest; import com.aliyun.oss.model.OSSObject; import com.aliyun.oss.model.OSSObjectSummary; import com.aliyun.oss.model.ObjectListing; import org.apache.commons.lang3.StringUtils; import org.joda.time.DateTime; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import org.apache.commons.lang3.RandomUtils; import java.io.*; import java.util.List; /** * @Author: ahui * @date: 2021/12/14 - 14:48 */ @Service public class FileUploadService { // 允许上传的格式 private static final String[] IMAGE_TYPE = new String[]{".bmp", ".jpg", ".jpeg", ".gif", ".png"}; @Autowired private OSS ossClient; @Autowired private AliyunConfig aliyunConfig; /** * @desc 文件上传 */ public FileUploadResult upload(MultipartFile uploadFile) { // 校验图片格式 boolean isLegal = false; for (String type : IMAGE_TYPE) { if (StringUtils.endsWithIgnoreCase(uploadFile.getOriginalFilename(), type)) { isLegal = true; break; } } //封装Result对象,并且将文件的byte数组放置到result对象中 FileUploadResult fileUploadResult = new FileUploadResult(); if (!isLegal) { fileUploadResult.setStatus("error"); return fileUploadResult; } //文件新路径 String fileName = uploadFile.getOriginalFilename(); String filePath = getFilePath(fileName); // 上传到阿里云 try { ossClient.putObject(aliyunConfig.getBucketName(), filePath, new ByteArrayInputStream(uploadFile.getBytes())); } catch (Exception e) { e.printStackTrace(); //上传失败 fileUploadResult.setStatus("error"); return fileUploadResult; } fileUploadResult.setStatus("done"); fileUploadResult.setResponse("success"); fileUploadResult.setName(this.aliyunConfig.getUrlPrefix() + filePath); fileUploadResult.setUid(String.valueOf(System.currentTimeMillis())); return fileUploadResult; } /** * @desc 生成路径以及文件名 例如://images/2019/08/10/15564277465972939.jpg */ private String getFilePath(String sourceFileName) { DateTime dateTime = new DateTime(); return "images/" + dateTime.toString("yyyy") + "/" + dateTime.toString("MM") + "/" + dateTime.toString("dd") + "/" + System.currentTimeMillis() + RandomUtils.nextInt(100, 9999) + "." + StringUtils.substringAfterLast(sourceFileName, "."); } /** * @desc 查看文件列表 */ public List list() { // 设置最大个数。 final int maxKeys = 200; // 列举文件。 ObjectListing objectListing = ossClient.listObjects(new ListObjectsRequest(aliyunConfig.getBucketName()).withMaxKeys(maxKeys)); List sums = objectListing.getObjectSummaries(); return sums; } /** * @desc 删除文件 */ public FileUploadResult delete(String objectName) { // 根据BucketName,objectName删除文件 ossClient.deleteObject(aliyunConfig.getBucketName(), objectName); FileUploadResult fileUploadResult = new FileUploadResult(); fileUploadResult.setName(objectName); fileUploadResult.setStatus("removed"); fileUploadResult.setResponse("success"); return fileUploadResult; } /** * @desc 下载文件 */ public void exportOssFile(OutputStream os, String objectName) throws IOException { // ossObject包含文件所在的存储空间名称、文件名称、文件元信息以及一个输入流。 OSSObject ossObject = ossClient.getObject(aliyunConfig.getBucketName(), objectName); // 读取文件内容。 BufferedInputStream in = new BufferedInputStream(ossObject.getObjectContent()); BufferedOutputStream out = new BufferedOutputStream(os); byte[] buffer = new byte[1024]; int lenght = 0; while ((lenght = in.read(buffer)) != -1) { out.write(buffer, 0, lenght); } if (out != null) { out.flush(); out.close(); } if (in != null) { in.close(); } } } Controller层 import com.ahui.canteen.service.FileUploadService; import com.ahui.canteen.vo.FileUploadResult; import com.aliyun.oss.model.OSSObjectSummary; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List; /** * @Author: ahui * @date: 2021/12/14 - 14:43 */ @Controller public class OssController { @Autowired private FileUploadService fileUploadService; /** * @author ahui * @desc 文件上传到oss * @return FileUploadResult * @Param uploadFile */ @RequestMapping("file/upload") @ResponseBody public FileUploadResult upload(@RequestParam("file") MultipartFile uploadFile) throws Exception { return this.fileUploadService.upload(uploadFile); } /** * @return FileUploadResult * @desc 根据文件名删除oss上的文件 * @author ahui * @Param objectName */ @RequestMapping("file/delete") @ResponseBody public FileUploadResult delete(@RequestParam("fileName") String objectName) throws Exception { return this.fileUploadService.delete(objectName); } /** * @author ahui * @desc 查询oss上的所有文件 * @return List * @Param */ @RequestMapping("file/list") @ResponseBody public List list() throws Exception { return this.fileUploadService.list(); } /** * @author ahui * @desc 根据文件名下载oss上的文件 * @return * @Param objectName */ @RequestMapping("file/download") @ResponseBody public void download(@RequestParam("fileName") String objectName, HttpServletResponse response) throws IOException { //通知浏览器以附件形式下载 response.setHeader("Content-Disposition", "attachment;filename=" + new String(objectName.getBytes(), "ISO-8859-1")); this.fileUploadService.exportOssFile(response.getOutputStream(),objectName); } }

到这里就SpringBoot的就配置完成了

三、Postman配置

注意Body这里选择file 点击 selcet files就可以选择文件了 在这里插入图片描述 上传成功返回路径 在这里插入图片描述 查看图片 在这里插入图片描述 删除图片

在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3