Django FileUpload 问题请教 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wxd92
V2EX    Django

Django FileUpload 问题请教

  •  
  •   wxd92 2020-06-06 15:47:10 +08:00 3550 次点击
    这是一个创建于 2027 天前的主题,其中的信息可能已经有所发展或是发生改变。
    用户上传文件( VUE )-> 存储相关信息至数据库 -> 计算文件其他相关参数如(size, length(语音时长)) -> 更新数据库

    数据库 Model: FileField, Size, Length

    我的问题是:
    因为必须等用户将文件传到目录下时,服务器端才能用得到的文件来计算相关参数,然后更新数据库

    如何得知文件已经传好了? 并立即更新数据库相关字段 (因为一开始文件并没有达到服务器端,所以一开始设置一个 default 值给 size, length; 等计算好了,再更新)
    11 条回复    2020-06-07 14:02:23 +08:00
    HuberyPang
        1
    HuberyPang  
       2020-06-06 16:35:46 +08:00 via Android   1
    文件上传时,前端可以获取文件的大小和类型,语音时常啥的就不清楚了。所以可以前端获取。
    后端处理,可以自己维护文件的保存,这样可以确保在获取文件信息时已经保存过文件了,可以直接在下面读取文件的信息, 注意下提交异常时,进行回滚,清除刚保存的文件就行了。
    wxd92
        2
    wxd92  
    OP
       2020-06-06 16:38:30 +08:00
    @HuberyPang 感谢, “可以自己维护文件的保存,这样可以确保在获取文件信息时已经保存过文件了” -》 这个可以详细说下吗? 自己维护文件的保存?
    HuberyPang
        3
    HuberyPang  
       2020-06-06 16:54:29 +08:00   1
    @wxd92 https://www.cnblogs.com/linxiyue/p/4038436.html 给你个参考连接 关键词 request.FILES
    zachlhb
        4
    zachlhb  
       2020-06-06 17:12:44 +08:00 via Android   1
    你拿到文件不得执行 io 写入,写入完成这还不知道么
    wxd92
        5
    wxd92  
    OP
       2020-06-06 17:29:46 +08:00
    @zachlhb 新手 ( 如何得知写入完成了呢?
    ericls
        6
    ericls  
       2020-06-06 18:28:25 +08:00 via iPhone   1
    用户不会传到你的目录 只会传给你 web server 你拿到 文件(file or file-like io object) 以后自己放到目录里的。 在你拿到文件的时候 你就知道大小了
    wxd92
        7
    wxd92  
    OP
       2020-06-06 19:10:23 +08:00
    @ericls 感谢 我想的是 在存到 database 之前 我需要获取文件,计算得到我需要的一些信息,如语音文件的时长,等, 拿来更新数据库
    fensou
        8
    fensou  
       2020-06-06 22:46:50 +08:00 via iPhone
    怠速抖动硬伤
    HashV2
        9
    HashV2  
       2020-06-07 02:01:45 +08:00   1
    我好像写过类似的
    我是直接在 model 下重写 save 方法做一些操作后再执行父类的 save 的:
    class DocumentModel(model):
    """
    字段定义略过
    """
    def save(self, force_insert=False, force_update=False, using=None, update_fields=None):
    # 大概是这样,具体忘了,这个节点是可以直接拿到 FileField 的文件内容的,怎么操作就随便了
    self.Size = self.FileField.size
    self.Length = XXXX
    super(DocumentModel, self).save()
    HashV2
        10
    HashV2  
       2020-06-07 02:03:15 +08:00   1
    @HashV2 我的缩进怎么都没了.... 反正大概就是这样 在写入数据库前就以可处理好相关参数再写入
    wxd92
        11
    wxd92  
    OP
       2020-06-07 14:02:23 +08:00
    感谢感谢 (又看了看文档 发现可以处理 temporyFile 的 TemporaryUploadedFile
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2576 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 15:30 PVG 23:30 LAX 07:30 JFK 10:30
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86