我正在开发一个Django项目。我希望用户能够通过表单上传文件,并将文件保存到自定义路径和自定义文件名(使用哈希值)。我想到的唯一解决方案是使用我正在使用的FileField的"upload_to"参数。这个参数的作用是:
1)将文件写入磁盘
2)计算哈希值
3)返回路径+哈希值作为文件名
问题在于有两个写操作:一个是将文件从内存保存到磁盘以计算哈希值,另一个是将文件保存到指定位置。
有没有办法覆盖FileField的保存到磁盘方法(或者我应该去哪里查找背后的具体情况),以便我可以使用临时名称保存文件,然后将其重命名为哈希值,而不是让它被保存两次。
谢谢。
save
方法可以发现,在调用generate_filename
之前,内容并没有绑定到FieldFile
上。不确定如何从上传函数获取内容的哈希值…最好的方法可能是子类化FieldFile::save
。 - FMCorz