如果应用中存在大量的图片,音频,视频,或者文件等资源,最好的办法不是把它们放在静态目录下,而是保存到资源服务器oss上。
目前可选的资源服务器挺多,比如FastDFS,Minio,AWS/S3等,云服务器供应商也提供资源服务器OSS租用。但最舒心的方式还是自己搭建一个私有资源服务器,比如Minio。
为什么选择Minio呢?因为实在是太简单易用了,功能却很强大。但Minio不注意使用的话,会存在一个超级大的信息泄露的风险。
简单说,就是如果你想要提供永久性的资源下载链接,就需要把Bucket(桶)的BP设置为Read&Write。
问题来了!!!
当你用 http://minio_out_url/bucket_path/ 访问时,会得到一个超大的XML
这是怎么回事呢?!原来minio的桶有一个listObjects的功能,默认最多1000条记录,这就意味着,如果你打开永久下载链接模式,那么任何人可以通过桶路径来获取你保存的所有资源的信息,然后一个一个下载下来!如果这些资源是各种敏感数据,比如说艳照门之类,那超级八卦又该爆发了。
怎么去封堵这个风险隐患呢?需要做两件事情:
1、把Minio隐藏到内网去,让公网用户无法直接访问到minio服务器
2、通过Nginx的proxy_pass跳转访问Minio资源
3、Nginx的配置文件进行Rewrite屏蔽,只允许访问具体资源文件,不允许访问桶路径:
location ^~ /images {
rewrite ^/images/(.+)$ /images/$1 break;
proxy_pass http://minio_local_url/;
再去访问http://minio_out_url/bucket_path/,你会发现路径无效。但是你用具体的资源链接去访问,仍然可以获得资源内容。
如果应用中存在大量的图片,音频,视频,或者文件等资源,最好的办法不是把它们放在静态目录下,而是保存到资源服务器oss上。目前可选的资源服务器挺多,比如FastDFS,Minio,AWS/S3等,云服务器供应商也提供资源服务器OSS租用。但最舒心的方式还是自己搭建一个私有资源服务器,比如Minio。为什么选择Minio呢?因为实在是太简单易用了,功能却很强大。但Minio不注意使用的话,会存在一个超级大的信息泄露的风险。简单说,就是如果你想要提供永久性的资源下载链接,就需要把Bucket(桶)的B
nohup ./
minio
server ./data/ --console-address :8090 > nohup.out 2>&1 &
5.启动后会在data/生成一个.
minio
.sys的隐藏文件夹
vi ./data/.
minio
.sys/config/config.json
access_key为用户名,secret_key为密码, 修改为对应值, 保存后退出, 重启应用即可
资源整理不易还请给你赞哦!!!!!!!!!!!!
//查看所有文件
final Iterable<Result<Item>> results =
minio
Client.
list
Object
s(bucket.name());
for (Result<Item> result : results) {
System.out.println(result.get().
object
Name());
1. Put
Object
调用Put
Object
接口上传文件(
Object
)。
public
Object
WriteResponse put
Object
(Put
Object
Args args)
注意事项:
添加的
Object
大小不能超过5 GB。
默认情况下,如果已存在同名
Object
且对该
Object
有访问权限,则新添加的
Object
将覆盖原有的
Object
,并返回200 OK。
OSS没有文件夹的概念,所有资源都是以文件来存储,但您可以通过创建一个以正斜线(/)结尾,大小为0的
Object
其中,SOURCE_BUCKET是源存储桶名称,TARGET_BUCKET是目标存储桶名称,--recursive参数表示递归复制整个目录树。
4. 等待
数据
复制完成后,可以使用mc工具验证目标存储桶中的
数据
是否与源存储桶一致。
需要注意的是,如果源和目标存储桶位于不同的
Minio
服务器上,需要确保两个服务器之间可以互相访问。可以使用mc工具的mirror命令进行跨服务器复制
数据
。另外,如果源存储桶中的
数据
比较大,可以考虑使用分块复制(multipart copy)功能来加速
数据
迁移。