已解决
X Spring File Storage实现文件上传与下载
来自网友在路上 166866提问 提问时间:2023-10-19 21:56:14阅读次数: 66
最佳答案 问答题库668位专家为你答疑解惑
一、简介
一行代码将文件存储到本地、FTP、SFTP、WebDAV、阿里云 OSS、华为云 OBS、七牛云 Kodo、腾讯云 COS、百度云 BOS、又拍云 USS、MinIO、 Amazon S3、GoogleCloud Storage、金山云 KS3、美团云 MSS、京东云 OSS、天翼云 OOS、移动 云EOS、沃云 OSS、 网易数帆 NOS、Ucloud US3、青云 QingStor、平安云 OBS、首云 OSS、IBM COS、其它兼容 S3 协议的存储平台。查看 所有支持的存储平台
官方文档
二、使用
这里以阿里云 OSS 为例
1、添加依赖
<!-- 引入本项目 -->
<dependency><groupId>org.dromara.x-file-storage</groupId><artifactId>x-file-storage-spring</artifactId><version>2.0.0</version>
</dependency>
<!-- 引入 阿里云 OSS SDK,如果使用其它存储平台,就引入对应的 SDK -->
<dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.16.1</version>
</dependency>
2、配置
dromara:x-file-storage: #文件存储配置default-platform: aliyun-oss-1 #默认使用的存储平台aliyun-oss:- platform: aliyun-oss-1 # 存储平台标识enable-storage: true # 启用存储access-key: ??secret-key: ??end-point: ??bucket-name: ??domain: ?? # 访问域名,注意“/”结尾,例如:https://abc.oss-cn-shanghai.aliyuncs.com/base-path: test/ # 基础路径
3、编码
在启动类上加上@EnableFileStorage注解
@EnableFileStorage
@SpringBootApplication
public class SpringFileStorageTestApplication {public static void main(String[] args) {SpringApplication.run(SpringFileStorageTestApplication.class,args);}}
4、上传
支持 File、MultipartFile、byte[]、InputStream、URL、URI、String、HttpServletRequest,大文件会自动分片上传
@RestController
public class FileDetailController {@Autowiredprivate FileStorageService fileStorageService;//注入实列/*** 上传文件*/@PostMapping("/upload")public FileInfo upload(MultipartFile file) {//只需要这一行代码即可上传成功return fileStorageService.of(file).upload();}/*** 上传文件,成功返回文件 url*/@PostMapping("/upload2")public String upload2(MultipartFile file) {FileInfo fileInfo = fileStorageService.of(file).setPath("upload/") //保存到相对路径下,为了方便管理,不需要可以不写.setObjectId("0") //关联对象id,为了方便管理,不需要可以不写.setObjectType("0") //关联对象类型,为了方便管理,不需要可以不写.putAttr("role","admin") //保存一些属性,可以在切面、保存上传记录、自定义存储平台等地方获取使用,不需要可以不写.upload(); //将文件上传到对应地方return fileInfo == null ? "上传失败!" : fileInfo.getUrl();}/*** 上传图片,成功返回文件信息* 图片处理使用的是 https://github.com/coobird/thumbnailator*/@PostMapping("/upload-image")public FileInfo uploadImage(MultipartFile file) {return fileStorageService.of(file).image(img -> img.size(1000,1000)) //将图片大小调整到 1000*1000.thumbnail(th -> th.size(200,200)) //再生成一张 200*200 的缩略图.upload();}/*** 上传文件到指定存储平台,成功返回文件信息*/@PostMapping("/upload-platform")public FileInfo uploadPlatform(MultipartFile file) {return fileStorageService.of(file).setPlatform("aliyun-oss-1") //使用指定的存储平台.upload();}/*** 直接读取 HttpServletRequest 中的文件进行上传,成功返回文件信息* 使用这种方式有些注意事项,请查看文档 基础功能-上传 章节*/@PostMapping("/upload-request")public FileInfo uploadPlatform(HttpServletRequest request) {return fileStorageService.of(request).upload();}
}
5、其他操作
//手动构造文件信息,可用于其它操作
FileInfo fileInfo = new FileInfo().setPlatform("huawei-obs-1").setBasePath("test/").setPath("aa/").setFilename("image.png").setThFilename("image.png.min.jpg");//文件是否存在
boolean exists = fileStorageService.exists(fileInfo);
//下载
byte[] bytes = fileStorageService.download(fileInfo).bytes();
//删除
fileStorageService.delete(fileInfo);
//其它更多操作
如果将文件记录保存到数据库中,还可以更方便的根据 URL 进行操作了
//直接从数据库中获取 FileInfo 对象,更加方便执行其它操作
FileInfo fileInfo = fileStorageService.getFileInfoByUrl("https://abc.def.com/test/aa/image.png");//文件是否存在
boolean exists = fileStorageService.exists("https://abc.def.com/test/aa/image.png");
//下载
byte[] bytes = fileStorageService.download("https://abc.def.com/test/aa/image.png").bytes();
//删除
fileStorageService.delete("https://abc.def.com/test/aa/image.png");
//其它更多操作
查看全文
99%的人还看了
相似问题
猜你感兴趣
版权申明
本文"X Spring File Storage实现文件上传与下载":http://eshow365.cn/6-19850-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: Confluence使用教程
- 下一篇: 【yolov8目标检测】使用yolov8训练自己的数据集