oss
工作中需要用到文件上传,之前使用的是本地文件系统存储方式,后来重构为支持多个存储源的方式,目前支持三种方式:local、seaweedfs、minio
存储介质
seaweedfs
# 启动 master
docker run -d \
-p 9333:9333 \
-p 19333:19333 \
-v /home/mining/report-cloud/docker/seaweedfs/master/data:/data \
--name seaweedfs-master \
chrislusf/seaweedfs:1.53 \
master -ip=master
# 启动 volume
docker run -d \
-p 8080:8080 \
-p 18080:18080 \
-v /home/mining/report-cloud/docker/seaweedfs/volume01/data:/data \
--name seaweedfs-volume \
--link seaweedfs-master:master \
chrislusf/seaweedfs:1.53 \
volume -max=5 -mserver="master:9333" -port=8080
# 申请空间
curl http://localhost:9333/dir/assign
#
{"count":1,"fid":"4,017f52110b","url":"127.0.0.1:8080","publicUrl":"localhost:80
80"}
# 推送文件,4,017f52110b表示第4个volume,017f52110b表示文件的唯一标识
curl -F file=@/home/seaweedfs/balance.png http://127.0.0.1:8080/4,017f52110b
minio
MinIO是与Amazon S3 API兼容的高性能对象存储服务器,提供了人性化的管理页面
https://github.com/minio/minio
docker run --name report-minio \
-p 19000:9000 \
-e "MINIO_ACCESS_KEY=qweasdzxc" \
-e "MINIO_SECRET_KEY=1234567890" \
-v /home/mining/report-cloud/docker/minio:/data \
-d minio/minio:latest server /data
# web 管理页面
http://localhost:19000/minio/login
# 创建一个 bucket 为 report
# 通过URL直接访问文件需要设置权限,参考下面博客
# https://blog.csdn.net/iKaChu/article/details/105809957
# 访问格式为
http://localhost:19000/bucket名/对象名
Java代码
maven依赖
org.lokra.seaweedfs
seaweedfs-client
0.7.3.RELEASE
io.minio
minio
3.0.10
代码
配置类
FileTag 枚举类
用来标记使用哪种存储介质
/**
* 文件上传的tag
*/
public enum FileTag {
TYPE_LOCAL,
TYPE_MINIO ,
TYPE_SEAWEEDFS;
}
FileUploadConfigLocal
本地存储配置类
public class FileUploadConfigLocal {
private String parentPath;
// 省略 get se