V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
wangxiaoaer
V2EX  ›  问与答

OSS/S3 的最佳实践

  •  
  •   wangxiaoaer · 2020-08-06 14:43:45 +08:00 · 1520 次点击
    这是一个创建于 1569 天前的主题,其中的信息可能已经有所发展或是发生改变。

    应用后端涉及到普通文件存储的准备都通过 OSS/S3 的方式实现,内网环境用 MinIO,外网就用正常的 OSS 或者 S3.

    问题在于:

    1 上传的时候前端直接传还是通过后端中转? MinIO 的 Presigned 相关操作好像可以防止前端泄漏密钥之类。

    2 无论前端还是后端跟 MinIO 交互,存储成功后好像没有返回文件地址,如何知道这个地址?

    3 获取到文件访问地址后,直接存入数据库?那万一今后存储服务的 endpoint 变了怎么办?

    8 条回复    2020-08-06 15:32:14 +08:00
    Baymaxbowen
        1
    Baymaxbowen  
       2020-08-06 14:52:33 +08:00 via iPhone
    OSS 不是可以用 sts 的方式吗,前端获取签名
    ooh
        2
    ooh  
       2020-08-06 14:56:55 +08:00
    存进去文件名字是什么不就是什么吗,我只存了文件名,你这个 MinIO 太高级了吧...
    wangxiaoaer
        3
    wangxiaoaer  
    OP
       2020-08-06 15:02:00 +08:00
    @ooh #2 只把文件名存进去? 那完整的访问地址呢?
    wunonglin
        4
    wunonglin  
       2020-08-06 15:06:51 +08:00
    @wangxiaoaer #3 直传的话上传地址就是访问地址
    ooh
        5
    ooh  
       2020-08-06 15:12:54 +08:00
    @wangxiaoaer 打比方你有个 file 表,存了几个数据 guid name extension size 文件存到 bucket 的时候就指定 key 为 guid.extension,你访问的时候就是 https://endpoint/guid.extension 难道你需要存到不同的 bucket 里面?那就批量修改数据库呗
    wangxiaoaer
        6
    wangxiaoaer  
    OP
       2020-08-06 15:17:40 +08:00
    @ooh #5 嗯,我也考虑过一个应用都用固定的 bucket 。

    假如 endpoint 为 http://192.168.1.100:9000,一个文件上传的时候 bucket=test filename=/a/b.png

    那么只把 bucket 和 filename 存到数据库就足够了? 然后返回地址的时候应用层把 endpoint bucket filename 进行拼接返回?
    lshero
        7
    lshero  
       2020-08-06 15:24:10 +08:00
    前一阵子发帖问了一下(/t/628055 )
    最后感觉还是选择了后端生成 sts token 前端直传,毕竟节约后端的带宽,而且如果分片上传后端不用自己再重新实现一遍大文件分片上传的逻辑。
    文件名称加上 endpoint 就是访问地址了,但是如果 bucket 是私有的话,后端分发地址之前之前需要自己生成签名或者前端使用 sdk 获取带签名的地址。
    ooh
        8
    ooh  
       2020-08-06 15:32:14 +08:00   ❤️ 1
    如果多个 bucket 你就加个字段标注一下,如果只有一个 bucket 你就存文件在 bucket 里面的文件名就是了,每个 bucket 都会分配一个子域名的,如果你直接用 s3 给你的子域名那就是 子域名+文件名 访问,如果你要用自己的子域名进行 cname 或者 反代 那就是 你自己的子域名+文件名访问,云存储浏览器端也可以直接上传文件到 bucket,你上传一个看看是什么样子的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2765 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 11:35 · PVG 19:35 · LAX 03:35 · JFK 06:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.