苏州网站建设方法,建设银行网站打印消费账单,梅州市城乡建设部网站首页,微商城网站开发django 的models.ImageFiled,FileField有属性upload_to#xff0c;该属性是指定将文件上传到服务器的位置#xff0c;及存储在哪个文件夹下#xff0c;你可以很方便甚至很少的代码就可以实现文件上传操作了。 但是默认的存储的文件名是没有改变的#xff0c;也就是说所存储… django 的models.ImageFiled,FileField有属性upload_to该属性是指定将文件上传到服务器的位置及存储在哪个文件夹下你可以很方便甚至很少的代码就可以实现文件上传操作了。 但是默认的存储的文件名是没有改变的也就是说所存储的文件名就是你上传时文件的本地名当服务器文件夹下有相同的文件名时系统会自动添加下划线来改变文件名以保证文件能顺利上传到服务器上。当是这样的文件名十分不美观而且很多时候我们喜欢自己定义文件名甚至动态控制文件保存的位置。这样看上去可能就不那么容易了。其实django也为我们想好了这一点并且很容易就可以实现你想要的操作。 1. upload_to指定的是文件保存的目录你可以指定upload_to/upload/%Y%m这段的意思是根据当前的年月作为目录名将文件保存到该文件夹下面例如现在是2009年2月那么文件就会保存在/upload/200902/目录下面。目录可以根据日期来改变了当然如果我不想用日期呢而且文件名我如何自定义呢下面看第二点 2. 查看django文档我们可以看到http://docs.djangoproject.com/en/dev/topics/files/#topics-files文档中我们发现下面的代码 [python] view plaincopyprint? from django.core.files.storage import default_storage from django.core.files.base import ContentFile path default_storage.save(/path/to/file, ContentFile(new content)) path u/path/to/file default_storage.size(path) 11 default_storage.open(path).read() new content default_storage.delete(path) default_storage.exists(path) False 其中有from django.core.files.storage import default_storage 我们查看django的原文件django.core.files.storage 下面定义了Storage和FileSystemStorage其中FileSystemStorage继承之Storage文件最后有两句 [python] view plaincopyprint? DefaultStorage get_storage_class(settings.DEFAULT_FILE_STORAGE) default_storage DefaultStorage() 与前面from django.core.files.storage import default_storage比较可以发现 default_storage是我们在settings.py中定义的也许你在自己项目下面settings.py文件里面没有看到这个属性但是我们知道项目下面的settings.py都是继承之global_settings.py的再次查看django原文件在django/conf可以看到该文件打开按 Ctrl F查找DEFAULT_FILE_STORAGE 就可以看到 DEFAULT_FILE_STORAGE django.core.files.storage.FileSystemStorage, 也就是默认的Storage了找到这个我们就找到文件彻底解决的办法了写一个自己的Storage来处理自己需要的操作。 因为Storage是基类而且是“虚类”我们可以继承FileSystemStorage因为该类已经帮我们做好了大部分事情。下面是个简单的例子---实现上面所说的自定义文件名 [python] view plaincopyprint? from django.core.files.storage import FileSystemStorage class ImageStorage(FileSystemStorage): from django.conf import settings def __init__(self, locationsettings.MEDIA_ROOT, base_urlsettings.MEDIA_URL): #初始化 super(ImageStorage, self).__init__(location, base_url) #重写 _save方法 def _save(self, name, content): import os, time, random #文件扩展名 ext os.path.splitext(name)[1] #文件目录 d os.path.dirname(name) #定义文件名年月日时分秒随机数 fn time.strftime(%Y%m%d%H%M%S) fn fn _%d % random.randint(0,100) #重写合成文件名 name os.path.join(d, fn ext) #调用父类方法 return super(ImageStorage, self)._save(name, content) OK!其他操作也就是重写相应的方法来满足你的需要喽。 看来在遇到问题的时候还是要多看看文档然后看看原程序看他们是如何实现的说不定就会有意想不到的想法和发现。 转载于:https://www.cnblogs.com/chenjianhong/archive/2012/03/22/4145148.html