使用 oss、gcs、minio、s3 等等对象存储的时候,应该保留后缀名吗?
比如我要做的是一个存储用户上传的图片、视频的服务,后缀可能是 jpg
、png
、mp4
等等。
因为要避免重复存储浪费存储空间的问题,所以我是这样打算的:
- 对用户上传的文件取
hashcode
(比如 md5 码),然后使用 hashcode 作为文件名保存在 oss 中 - 对于不同用户上传相同的视频、照片,就可以预先计算得到 hashcode,然后去 oss 去看下有没有指定的 key
- 有了,就不用重新上传到 oss
这样的设置解决了重复上传问题的同时,不需要引入一个 mysql
、redis
之类的东西记录重复
但是失去文件后缀不是一个好主意,有什么解决方案吗?
文件后缀,我应该通过文件的 content
去判断呢?还是通过用户带的文件后缀判断呢?
通过文件的 content
去判断,可以保证 100%
区分是什么文件吗?
通过用户带的文件后缀判断有感觉不是很靠谱,因为用户可以骗人!
然后就是后缀(或者说文件类型)应该加到文件路径(oss 称之为 key)中,还是作为 object 的 metadata
信息好呢?
除非你只存不取,否则一定有一个地方要记录 用户/文件原名/大小/hash后的文件名 等等信息的
有后缀名就用,用户自己不好好玩是用户的事情