关于定制FileField中的上传文件名称问题

网友投稿 241 2023-04-16


关于定制FileField中的上传文件名称问题

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_/

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中的上传文件名称,希望对大家有所帮助,如果大家有任何疑问请给我留言,会及时回复大家的。在此也非常感谢大家对我们网站的支持!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Spring MVC中自定义拦截器的实例讲解
下一篇:Java文件操作类 File实现代码
相关文章

 发表评论

暂时没有评论,来抢沙发吧~