ImageField,FileField上传文件命名问题
django 的models.ImageFiled,FileField有屬性upload_to,該屬性是指定將文件上傳到服務(wù)器的位置,及存儲在哪個文件夾下,你可以很方便甚至很少的代碼就可以實現(xiàn)文件上傳操作了。
但是默認的存儲的文件名是沒有改變的,也就是說所存儲的文件名就是你上傳時文件的本地名,當服務(wù)器文件夾下有相同的文件名時,系統(tǒng)會自動添加下劃線來改變文件名,以保證文件能順利上傳到服務(wù)器上。當是這樣的文件名十分不美觀,而且很多時候我們喜歡自己定義文件名,甚至動態(tài)控制文件保存的位置。這樣看上去可能就不那么容易了。其實django也為我們想好了這一點,并且很容易就可以實現(xiàn)你想要的操作。
1. upload_to指定的是文件保存的目錄,你可以指定upload_to="/upload/%Y%m",這段的意思是根據(jù)當前的年月作為目錄名,將文件保存到該文件夾下面,例如,現(xiàn)在是2009年2月,那么文件就會保存在/upload/200902/目錄下面。目錄可以根據(jù)日期來改變了,當然如果我不想用日期呢,而且文件名我如何自定義呢?下面看第二點
2. 查看django文檔我們可以看到http://docs.djangoproject.com/en/dev/topics/files/#topics-files,文檔中我們發(fā)現(xiàn),下面的代碼:
[python] view plaincopyprint?其中有from django.core.files.storage?import default_storage
我們查看django的原文件django.core.files.storage
下面定義了Storage和FileSystemStorage,其中FileSystemStorage繼承之Storage,文件最后有兩句
[python] view plaincopyprint?
與前面from django.core.files.storage import default_storage比較可以發(fā)現(xiàn),
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,因為該類已經(jīng)幫我們做好了大部分事情。下面是個簡單的例子---實現(xiàn)上面所說的自定義文件名:
?
[python] view plaincopyprint?OK!其他操作也就是重寫相應(yīng)的方法來滿足你的需要嘍。
看來,在遇到問題的時候還是要多看看文檔,然后看看原程序,看他們是如何實現(xiàn)的,說不定就會有意想不到的想法和發(fā)現(xiàn)。
轉(zhuǎn)載于:https://www.cnblogs.com/chenjianhong/archive/2012/03/22/4145148.html
總結(jié)
以上是生活随笔為你收集整理的ImageField,FileField上传文件命名问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 更多 Kinect for Window
- 下一篇: CCD与CMOS摄像头的区别