关于定制FileField中的上传文件名称问题
2017-08-22 16:50
344 查看
FileField中的upload_to属性可以设定上传文件的存储目录和名称,它可以是个字符串,也可以是个callable,比如一个方法。
当upload_to的值设为一个方法时,就可以对上传文件的名称进行修改了。方法需要两个参数,instance与filename,instance为此FileField所属的Model实例,filename为上传文件的名称。
举例:
def user_directory_path(instance, filename): # file will be uploaded to MEDIA_ROOT/user_<id>/<filename> return 'user_{0}/{1}'.format(instance.user.id, filename) class MyModel(models.Model): upload = models.FileField(upload_to=user_directory_path)
当一个类定义了__call__方法时,也可以像func一样被调用,所以,upload_to的值也可以是一个定义了__call__方法的类。
比如,要根据上传时间为文件名加时间戳:
import hashlib import os import time from django.utils.deconstruct import deconstructible @deconstructible class TimeStampFileName(object): def __init__(self, path): self.path = os.path.join(path, "%s%s") def __call__(self, instance, filename): extension = os.path.splitext(filename)[1] data = "%s_%d"%(filename,int(time.time())) file_hash = hashlib.sha1(data).hexdigest() return self.path % (file_hash, extension)
Model中的FileField可以如下定义:
class MyModel(models.Model): upload = models.FileField(upload_to=TimeStampFileName('media/'), )
总结
以上所述是小编给大家介绍的定制FileField中的上传文件名称,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
您可能感兴趣的文章:
相关文章推荐
- 定制FileField中的上传文件名称
- 定制FileField中的上传文件名称
- 定制FileField中的上传文件名称实例
- 定制FileField中的上传文件名称
- 解决HttpClient的FilePart上传文件中使用中文名称文件名乱码问题
- django ImageField,FileField,上传文件,命名问题
- 关于extjs使用filefield上传时出现非真实路劲问题
- [置顶]关于使用input type=file 标签上传文件的注意细节(上传文件 无法获取文件 问题)
- 关于使用input type=file 标签上传文件的注意细节(上传文件 无法获取文件 问题)
- 解决HttpClient的FilePart上传文件中使用中文名称文件名乱码问题
- 关于微信WEBVIEW网页无法上传文件的问题,即是INPUT FILE不支持的问题
- sql server 关于表中只增标识问题 C# 实现自动化打开和关闭可执行文件(或 关闭停止与系统交互的可执行文件) ajaxfileupload插件上传图片功能,用MVC和aspx做后台各写了一个案例 将小写阿拉伯数字转换成大写的汉字, C# WinForm 中英文实现, 国际化实现的简单方法 ASP.NET Core 2 学习笔记(六)ASP.NET Core 2 学习笔记(三)
- ImageField,FileField上传文件命名问题
- Extjs 关于文件上传file 框 可输入问题解决
- Extjs中用dwr实现文件上传时,fileuploadfield不能正常显示的问题
- Asp.net(C#)利用File Field多文件上传
- [导入]Django中动态改变ImageField和FileField中文件的上传路径
- 关于Html动态添加上传文件控件inputFile(附件)及清除已选择的文件的几个方法
- 关于多文件上传问题
- 关于上传文件大小问题