关于数据库中上传文件的储存方案?

2019-08-01 11:53:00 +08:00
 www6688w

跟各位 V 站 大佬请教下。

1.一般对于网站系统中上传的文件,需要在数据库中建立单独的数据表来记录全部的上传操作吗?

2.在数据表中,上传文件的字段一般如何存储?是直接存文件的相对路径,还是 关联文件上传记录的 id,或者还有其他更好的方案吗?

emmm,目前我自己一般是先给一个上传文件的记录数据表,然后在数据表需要关联上传文件的字段存储记录 id。 这样的做法,我个人感觉稍微会更好管控一些,也方便迁移。 缺点就是每次查询都需要单独查询文件的相对路径(或者 left join )。

那大佬们 一般是怎么处理 呢 ?

2936 次点击
所在节点    程序员
18 条回复
gz911122
2019-08-01 12:10:55 +08:00
存路径就可以用了
没必要多连一次表
wingyiu
2019-08-01 12:56:28 +08:00
方案二会更好些,文件可以单独作为一个基础服务的,文件元数据管理着具体是存在哪(磁盘或者分布式对象存储)
julyclyde
2019-08-01 15:36:43 +08:00
首先,不要存数据库里
LeBron23
2019-08-01 15:41:56 +08:00
CallMeReznov
2019-08-01 15:43:29 +08:00
存放在网站本地或者开存储存放
放数据库这种操作后期维护是要被打死!
msg7086
2019-08-01 15:51:49 +08:00
我文件直接存数据库里,省了很多事,从此再也不用不停备份文件了。
sunjiayao
2019-08-01 15:55:11 +08:00
单独建张表。记录文件路径 原始名 大小 上传人等信息。封装下,并不费事
www6688w
2019-08-01 16:38:37 +08:00
@julyclyde 存数据库是指什么意思? ⊙▽⊙
www6688w
2019-08-01 16:39:37 +08:00
@sunjiayao emmm,我目前就是采用这种形式,总体感觉还行。反正就是查询的时候需要单独获取下路径
annielong
2019-08-01 17:31:16 +08:00
存数据库是指二进制存在数据库字段中,不过个人一般都是用在 C/S 下,B/S 下都是存独立文件,数据库只存路径
www6688w
2019-08-01 17:55:19 +08:00
@annielong 卧槽,这种骚操作,从来没想过耶 (。_。)

真要这样存,数据表得多大
sunjiayao
2019-08-01 18:44:19 +08:00
@www6688w #9 不用吧。。 返回的时候将下载路径加在返回包里。
Rorysky
2019-08-01 18:47:09 +08:00
没记错 mysql 有专门的二进制存储 方案
jaskle
2019-08-01 18:47:36 +08:00
主要是放在数据库里你就用 cdn 就费事了,而且白白浪费数据库 cpu 和带宽。
keepeye
2019-08-01 18:47:50 +08:00
搞一张表存储文件 id,文件 id 中包含路径
starsriver
2019-08-01 18:58:04 +08:00
转换为 blob 或者 bs64.
jorneyr
2019-08-01 21:01:36 +08:00
我们存储文件的绝对路径,和访问文件的 URL (文件先上传到临时文件夹,正式提交表单的时候移动到文件仓库的文件夹下),文件可以通过 Web Server 来访问,也可以通过 Nginx 直接访问静态文件。
annielong
2019-08-02 09:18:30 +08:00
@www6688w 早期单机时代都这么搞,现在网络时代都上文件存储系统了,数据库中只存储路径或者文件存储系统的编号

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

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

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

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

© 2021 V2EX