Django FileUpload 问题请教

2020-06-06 15:47:10 +08:00
 wxd92
用户上传文件( VUE )-> 存储相关信息至数据库 -> 计算文件其他相关参数如(size, length(语音时长)) -> 更新数据库

数据库 Model: FileField, Size, Length

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

如何得知文件已经传好了? 并立即更新数据库相关字段 (因为一开始文件并没有达到服务器端,所以一开始设置一个 default 值给 size, length; 等计算好了,再更新)
3182 次点击
所在节点    Django
11 条回复
HuberyPang
2020-06-06 16:35:46 +08:00
文件上传时,前端可以获取文件的大小和类型,语音时常啥的就不清楚了。所以可以前端获取。
后端处理,可以自己维护文件的保存,这样可以确保在获取文件信息时已经保存过文件了,可以直接在下面读取文件的信息, 注意下提交异常时,进行回滚,清除刚保存的文件就行了。
wxd92
2020-06-06 16:38:30 +08:00
@HuberyPang 感谢, “可以自己维护文件的保存,这样可以确保在获取文件信息时已经保存过文件了” -》 这个可以详细说下吗? 自己维护文件的保存?
HuberyPang
2020-06-06 16:54:29 +08:00
@wxd92 https://www.cnblogs.com/linxiyue/p/4038436.html 给你个参考连接 关键词 request.FILES
zachlhb
2020-06-06 17:12:44 +08:00
你拿到文件不得执行 io 写入,写入完成这还不知道么
wxd92
2020-06-06 17:29:46 +08:00
@zachlhb 新手 ( 如何得知写入完成了呢?
ericls
2020-06-06 18:28:25 +08:00
用户不会传到你的目录 只会传给你 web server 你拿到 文件(file or file-like io object) 以后自己放到目录里的。 在你拿到文件的时候 你就知道大小了
wxd92
2020-06-06 19:10:23 +08:00
@ericls 感谢 我想的是 在存到 database 之前 我需要获取文件,计算得到我需要的一些信息,如语音文件的时长,等, 拿来更新数据库
fensou
2020-06-06 22:46:50 +08:00
怠速抖动硬伤
HashV2
2020-06-07 02:01:45 +08:00
我好像写过类似的
我是直接在 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
2020-06-07 02:03:15 +08:00
@HashV2 我的缩进怎么都没了.... 反正大概就是这样 在写入数据库前就以可处理好相关参数再写入
wxd92
2020-06-07 14:02:23 +08:00
感谢感谢 (又看了看文档 发现可以处理 temporyFile 的 TemporaryUploadedFile

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

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

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

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

© 2021 V2EX