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,文档中我们发现,下面的代码:
>>> 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,文件最后有两句
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,因为该类已经帮我们做好了大部分事情。下面是个简单的例子---实现上面所说的自定义文件名:
from django.core.files.storage import FileSystemStorage
class ImageStorage(FileSystemStorage):
from django.conf import settings
def __init__(self, location=settings.MEDIA_ROOT, base_url=settings.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!其他操作也就是重写相应的方法来满足你的需要喽。
看来,在遇到问题的时候还是要多看看文档,然后看看原程序,看他们是如何实现的,说不定就会有意想不到的想法和发现。
文章出处:飞诺网(www.firnow.com):http://dev.firnow.com/course/1_web/javascript/jsjs/20090308/159862.html
分享到:
相关推荐
**Delphi Web前端开发教程——基于TMS WEB Core框架** Delphi Web前端开发教程是针对想要使用TMS WEB Core框架创建Web应用程序的开发者,无论你是初学者还是高级开发者,本教程都提供了丰富的学习资源。TMS WEB ...
WebFtp是一款基于ASP.NET技术实现的Web版FTP服务,它允许用户通过浏览器进行FTP相关的操作,如上传、下载、删除文件,重命名文件,编辑文本文件,以及创建和删除文件夹。这样的服务大大简化了FTP客户端的使用,使得...
WebApi和访问WebApi是开发过程中常见的两个概念,它们在构建分布式系统和提供网络服务时起着关键作用。本文将深入探讨这两个项目及其关联技术,包括WebApi的使用和通过HttpWebRequest类进行WebApi调用。 WebApi是...
AppWeb是一个功能丰富的嵌入式Web服务器,它比 boa(另一个知名的嵌入式Web服务器)提供了更广泛的支持。AppWeb的核心特性包括: 1. **轻量级架构**:AppWeb的设计目标是小体积和低内存占用,使其适合在资源有限的...
C# WebApi实战项目Demo,便于快速学习WEBAPI, WebAPI: 提供给不同客户端(跨平台客户端)调用网页的应用程序编程接口。 Web API,一般指基于HTTP协议的编程接口,接口一般定义为HTTP或HTTPS:请求方法、请求路径、...
《C# Web开发者指南教程》是一本专门为初学者设计的教育资源,旨在帮助读者掌握使用C#语言进行Web应用程序开发的基本技能。这本书包含了丰富的理论知识和实际操作指导,结合了源代码,使得学习过程更具实践性。 C#...
Whether you’re sharing data between two internal systems or building an API so users can access their data, this practical book provides everything you need to build web service APIs with ...
web平台安装程序是一个非常酷的产品是一个很小的下载管理程序 - 微软Web平台安装程序(Microsoft Web Platform Installer),它极大地简化了web服务器和web开发设施的安装和配置。它可在Windows XP, Vista, Windows ...
标题 "大华摄像头_WEB_DEMO_基于webplugin插件.zip" 暗示这是一个关于大华品牌的网络摄像头的Web演示项目,它依赖于一个名为"webplugin"的浏览器插件来实现。这个压缩包可能包含了运行该Web DEMO所需的所有文件。 ...
其中前两章讲述了WEB环境和web开发的基础切识,在随后的11章中从理论和实践两个方而讲解了web应用程序的创建、测试、调试和部署等环节,如服务器控件、数探访问、数据绑定、Asp.NET状态管理、XML与web开发、web应用...
VMware vSphere Web Client 操作篇 VMware vSphere Web Client 是 VMware vSphere 的一个主要组件,提供了基于 Web 的界面,用于管理和监控 VMware vSphere 环境。下面我们将详细介绍 VMware vSphere Web Client 的...
在本项目中,我们有两个主要部分:WebApi项目和访问WebApi的项目。这两个项目的协同工作使得数据交换和功能调用更为高效。 首先,让我们深入理解WebApi项目。WebApi项目的核心是Controller,它负责处理来自客户端的...
IEWebControl.exe是Microsoft开发的一个ActiveX控件,它允许开发者在Windows应用程序中集成Web浏览功能。这个控件基于Internet Explorer的核心,使得用户可以在桌面应用中直接浏览网页,而无需打开单独的浏览器窗口...
在IT领域,C#是一种广泛使用的编程语言,尤其在创建桌面应用程序和Web服务方面。本示例中的"WebApi Winform托管"是一个结合了C#的Windows Forms(Winform)和ASP.NET Web API的技术实现,它允许在Winform应用内部...
本资源就可以为你解决你所面临的这些问题,原始HTML+CSS+JS页面设计, web大学生网页设计作业源码,这是一个不错的网页制作资源合集,画面精美,非常适合初学者学习使用。 多套(HTML+CSS+JS)网页设计的学生期末大...
Embedded Appweb 移植 安装 应用是指将 Appweb 服务器移植到嵌入式系统中,安装并配置 Appweb 服务器,以实现 Web 服务。Appweb 服务器是一个小巧、灵活、可扩展的 Web 服务器,支持多种功能特性,包括 Full ...
web渗透系列教学下载共64份: 内容如下; web渗透--1--web安全原则.pdf web渗透--10--不安全的HTTP方法.pdf web渗透--11--登录认证安全测试.pdf web渗透--12--浏览器缓存攻击测试.pdf web渗透--13--目录遍历文件包含...
Web网页设计制作-毕业设计期末大作业源码课程设计 Web网页设计制作-毕业设计期末大作业源码课程设计 Web网页设计制作-毕业设计期末大作业源码课程设计 Web网页设计制作-毕业设计期末大作业源码课程设计 Web网页设计...
Python Web开发是现代互联网应用构建的重要技术之一,它利用Python语言的强大功能和丰富的库资源,结合Web框架,如Django、Flask等,快速构建高效、可扩展的Web应用程序。"Python Web开发实录源代码"是针对这一主题...