V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
www6688w
V2EX  ›  程序员

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

  •  
  •   www6688w · 2019-08-01 11:53:00 +08:00 · 2943 次点击
    这是一个创建于 1945 天前的主题,其中的信息可能已经有所发展或是发生改变。

    跟各位 V 站 大佬请教下。

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

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

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

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

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

    真要这样存,数据表得多大
    sunjiayao
        12
    sunjiayao  
       2019-08-01 18:44:19 +08:00
    @www6688w #9 不用吧。。 返回的时候将下载路径加在返回包里。
    Rorysky
        13
    Rorysky  
       2019-08-01 18:47:09 +08:00 via iPhone
    没记错 mysql 有专门的二进制存储 方案
    jaskle
        14
    jaskle  
       2019-08-01 18:47:36 +08:00 via Android
    主要是放在数据库里你就用 cdn 就费事了,而且白白浪费数据库 cpu 和带宽。
    keepeye
        15
    keepeye  
       2019-08-01 18:47:50 +08:00
    搞一张表存储文件 id,文件 id 中包含路径
    starsriver
        16
    starsriver  
       2019-08-01 18:58:04 +08:00 via Android
    转换为 blob 或者 bs64.
    jorneyr
        17
    jorneyr  
       2019-08-01 21:01:36 +08:00
    我们存储文件的绝对路径,和访问文件的 URL (文件先上传到临时文件夹,正式提交表单的时候移动到文件仓库的文件夹下),文件可以通过 Web Server 来访问,也可以通过 Nginx 直接访问静态文件。
    annielong
        18
    annielong  
       2019-08-02 09:18:30 +08:00
    @www6688w 早期单机时代都这么搞,现在网络时代都上文件存储系统了,数据库中只存储路径或者文件存储系统的编号
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5367 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 49ms · UTC 07:25 · PVG 15:25 · LAX 23:25 · JFK 02:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.