后端开发上传图片到本地和云存储功能的思路是怎样的?

2023-06-11 15:58:40 +08:00
 jinker
我自己开发的一个论坛程序,有个上传头像 rest api ,前端上传头像便是将通过这个 api 将文件上传到后端,后端再保存到本地目录下,数据库记录下路径,然后返回一个"key",前端将这个"key"更新到用户资料的"avatar_key"字段中。后续请求图片资源便是通过约定的 url 如 /resources/{key}来请求后端,后端根据 key 在数据库找到文件路径,将文件返回前端。

虽然搭建起来了,但我感觉有些不对劲,而且后续我上网找了很多资料,了解到了云存储。就希望后续可以提供有个配置选项,本地存储与云存储。但是要如何设计才能以最低代码支持两个方案?毕竟云存储的话我想要是使用预签名提供给前端,前端使用签名 url 上传到指定路径,但本地存储不是这样的方式,要想同时支持就要两套代码了啊?
1172 次点击
所在节点    问与答
12 条回复
weijancc
2023-06-11 16:05:43 +08:00
如果访问量不大, 就不要前端直接访问文件存储, 而是后端写一个接口, 收到文件的 key 时去获取文件存储的内容, 再返回给前端
jinker
2023-06-11 16:32:26 +08:00
@weijancc 能否告知为什么前端不要访问文件存储啊?后端获取文件存储内容再返回不是多一层消耗吗?
Bingchunmoli
2023-06-11 17:03:05 +08:00
因为你的 key ,一般都是直接存储路径没有 key 中间层,所以不论本地还是云端都支持
jinker
2023-06-11 17:09:12 +08:00
@Bingchunmoli 抱歉啊,有点不明白,一般都是直接存储路径没有 key 中间层是什么意思?
issakchill
2023-06-11 18:04:23 +08:00
写过类似的功能 返回给前端的都是整段地址的后半段,前半段通过不同实现去补全,可以做到本地跟 minio 切换
openliucongbx
2023-06-11 18:11:25 +08:00
我是获取 oss 的临时令牌,发给前端,前端直接上传到 oss,最后返回地址给我

大概是用这个
https://help.aliyun.com/document_detail/31852.html?spm=a2c4g.31848.0.0.1dd62cb7WkR9VT
weijancc
2023-06-11 18:17:08 +08:00
@jinker 个人是为了安全, 直接访问相当于暴露了你的文件存储服务器, 不过我这里指的是 minio 这种 s3 存储服务.
jinker
2023-06-11 18:53:06 +08:00
@issakchill 我也是想到这种思路,但是实现本地存储不知道应该如何实现?是要将本地存储做的类似 minio 这些 oss 那样的方式吗?
jinker
2023-06-11 18:59:55 +08:00
@issakchill 还有就是流量问题,oss 是如何套 cdn 的,这方面不了解。oss 的 cdn 不是应该和服务器的 cdn 同一个吗,我看资料貌似 oss 有自己的 cdn 。
whileFalse
2023-06-12 06:36:23 +08:00
这个的难点在哪儿?
你要是懒的写两套代码(尤其是前端)就让用户 post 图片到你的服务器你服务器再上传 s3 呗。
chuck1in
2023-06-12 07:36:32 +08:00
现在论坛还可以备案吗?
issakchill
2023-06-12 15:19:17 +08:00
@jinker #8 本地上传我用最朴素的方式,就放在某个文件夹中,nginx 挂载上就好了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/947757

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX