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 ...
WebApi和访问WebApi是开发过程中常见的两个概念,它们在构建分布式系统和提供网络服务时起着关键作用。本文将深入探讨这两个项目及其关联技术,包括WebApi的使用和通过HttpWebRequest类进行WebApi调用。 WebApi是...
AppWeb是一个功能丰富的嵌入式Web服务器,它比 boa(另一个知名的嵌入式Web服务器)提供了更广泛的支持。AppWeb的核心特性包括: 1. **轻量级架构**:AppWeb的设计目标是小体积和低内存占用,使其适合在资源有限的...
web工具箱web工具箱web工具箱web工具箱web工具箱web工具箱web工具箱web工具箱web工具箱web工具箱web工具箱web工具箱web工具箱web工具箱web工具箱web工具箱web工具箱web工具箱web工具箱web工具箱web工具箱web工具箱...
《C# Web开发者指南教程》是一本专门为初学者设计的教育资源,旨在帮助读者掌握使用C#语言进行Web应用程序开发的基本技能。这本书包含了丰富的理论知识和实际操作指导,结合了源代码,使得学习过程更具实践性。 C#...
标题 "大华摄像头_WEB_DEMO_基于webplugin插件.zip" 暗示这是一个关于大华品牌的网络摄像头的Web演示项目,它依赖于一个名为"webplugin"的浏览器插件来实现。这个压缩包可能包含了运行该Web DEMO所需的所有文件。 ...
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的核心,使得用户可以在桌面应用中直接浏览网页,而无需打开单独的浏览器窗口...
本资源就可以为你解决你所面临的这些问题,原始HTML+CSS+JS页面设计, web大学生网页设计作业源码,这是一个不错的网页制作资源合集,画面精美,非常适合初学者学习使用。 多套(HTML+CSS+JS)网页设计的学生期末大...
《白帽子讲Web安全》与《Web前端黑客技术揭秘》这两本书是IT行业中关于网络安全,特别是Web安全领域的经典著作。它们深入浅出地探讨了Web安全的重要性和实践方法,为读者提供了丰富的知识。 《白帽子讲Web安全》一...
C# WebAPI是一种基于.NET Framework或.NET Core的轻量级HTTP服务框架,它允许开发者创建RESTful服务,这些服务可以被各种...学习并掌握WebAPI,可以帮助开发者构建高效、可扩展的API服务,满足现代Web应用的需求。
《白帽子讲Web安全》内容简介:在互联网时代,数据安全与个人隐私受到了前所未有的挑战,各种新奇的攻击技术层出不穷。如何才能更好地保护我们的数据?《白帽子讲Web安全》将带你走进Web安全的世界,让你了解Web安全...
【大华摄像头Web3.0二次开发WebPlugin详解】 大华摄像头Web3.0二次开发WebPlugin是一款专为开发者设计的工具,旨在帮助用户利用Web技术进行摄像头的高级功能定制和扩展。它允许开发者通过浏览器插件的方式,接入...
Web 项目需求分析模板详解 正如标题所示,本资源提供了一个 Web 项目需求分析模板,旨在帮助初学 Web 工程的学员快速上手编写需求分析文档。下面,我们将详细解释该模板的结构和内容,并对标签 "java, web,IT" ...
【标题】Web版的数据库管理工具 在当前的数字化时代,数据库管理对于各种规模的企业和组织都至关重要。传统的桌面数据库管理工具虽然功能强大,但在远程协作、多用户访问以及跨平台兼容性方面存在局限。因此,Web版...
性能是任何一个网站成功的关键,然而,如今日益丰富的内容和大量使用Ajax的Web应用程序已迫使浏览器达到其处理能力的极限。Steve Souders是Google Web性能布道者和前Yahoo!首席性能工程师,他在本书中提供了宝贵的...
Java Web教程和资料电子书是一份宝贵的资源,它旨在引导初学者和有一定基础的开发者深入理解和掌握Java Web开发技术。这份教程涵盖了Java面向对象编程在Web环境中的应用,是提升编程技能的重要参考资料。 首先,...
【标题】"WebAPI寄宿于WinForm"的实现是一个技术方案,它允许开发者在Windows Forms应用程序中直接运行和控制WebAPI服务,而无需依赖IIS(Internet Information Services)这样的传统Web服务器。这种方式的优点在于...
在IT行业中,网络通信是核心部分之一,而Web服务与Socket服务的结合使用常常用于构建高效、实时的应用。本文将详细解析"web监听端口(Socket服务随web启动而启动)"这一主题,涵盖Socket、Tomcat服务器以及Web服务的...