django中处理文件上传文件

1 template模版文件uploadfile.html

特别注意的是,只有当request方法是POST,且发送request的<form>有属性enctype="multipart/form-data"时,request.FILES中包含文件数据,否则request.FILES为空。

<form method="post" action="" enctype="multipart/form-data" >
<input type="file" name="personico" /><br /><br /><br />
<input type="submit" value="提交"/>
</form>
<img src="/static/jpg/{{personico}}" width="100px" height="100px" alt="头像" />

2 视图函数

if request.method == "POST":
        f = request.FILES.get(‘personico‘)
        baseDir = os.path.dirname(os.path.abspath(__name__));
        jpgdir = os.path.join(baseDir,‘static‘,‘jpg‘);

        filename = os.path.join(jpgdir,f.name);
        fobj = open(filename,‘wb‘);
        for chrunk in f.chunks():
            fobj.write(chrunk);
        fobj.close();
        return render_to_response(‘uploadfile.htm‘,{‘personico‘:f.name});

    else:
        return render_to_response(‘uploadfile.htm‘);

此处说明:将上传的文件存放在工程目录下的static/jpg/目录下,文件名就是上传的文件名,只是实验性的所以没有加错误验证,如果用于生产环境,需要严格验证,比如文件是否存在、读写错误等。

上传的文件在request.FILES,是一个近似字典类型的数据类型,拥有基本的4个基本属性,name文件名/size文件大小(以字节为单位)/content_type文件类型/read文件内容

拥有的方法chunks()返回一个上传文件的分块生成器,有一个可选参数是设置每次读取的字节数。如果上传的文件很大,使用这个方法可以节省内存,不会一下子占用大量内存空间。

上传文件保存的位置
保存上传文件前,数据需要存放在某个位置。默认时,当上传文件小于2.5M时,django会将上传文件的全部内容读进内存。意味着保存文件只有一次从内存读取,一次写磁盘。
但当上传文件很大时,django会把上传文件写到临时文件中,然后存放到系统临时文件夹中。

三个设置控制django文件上传的行为:
FILE_UPLOAD_MAX_MEMORY_SIZE:直接读入内存的最大上传文件大小(字节数)。当大于此值时,文件存放到磁盘。默认2.5M字节
FILE_UPLOAD_TEMP_DIR
FILE_UPLOAD_PERMISSIONS:权限
FILE_UPLOAD_HANDLERS
上传文件真正的处理器。修改此项设置可以完成自定义django上传文件的过程。
默认是:

("django.core.files.uploadhandler.MemoryFileUploadHandler",
"django.core.files.uploadhandler.TemporaryFileUploadHandler",)

先尝试装入内存,如不行就存入到临时文件。

实验效果:

上传前效果

上传后效果

时间: 2024-12-25 15:51:34

django中处理文件上传文件的相关文章

Spring 中Apache Commons上传文件

在用Apache Commons完成文件上传功能需有的几步: 1.导入两个架包:commons-fileupload.jar和commons-io.jar maven中: 1 <dependency> 2 <groupId>commons-fileupload</groupId> 3 <artifactId>commons-fileupload</artifactId> 4 <version>1.3</version> 5

Linux中ftp不能上传文件/目录的解决办法

在linux中不能上传文件或文件夹最多的问题就是权限问题,但有时也不一定是权限问题了,像我就是空间不够用了,下面我来总结一些ftp不能上传文件/目录的解决办法 在排除用户组和权限等问题后,最可能引起ftp下文件无法上传并经常被忽略的因素就是硬盘空间已满,而导致硬盘空间满的问题多数是日志文件所占用的,例如mysql的日志会在不知不觉中变得十分庞大,直至占满剩余的硬盘空间. 解决办法: 1.定期手动清理或使用脚本清理mysql日志或其他相关日志文件. 2.关闭mysql日志(不推荐) 上面是空间有问

本地虚拟机中匿名ftp上传文件失败的问题

在10.10.50.230中新建了一个匿名的ftp服务器,结果在10.10.50.241中上传文件时提示: local: README.txt remote: /var/ftp/pub/upload 227 Entering Passive Mode (10,10,50,230,117,8). 553 Could not create file.   由于搭建步骤是完全按照标准文档建立的,vsftp.conf的设置应该没有问题,检查:getsebool -a|grep ftp 发现: allow

SWFUpload多文件上传 文件个数限制 setStats()

使用swfupload仿赶集的图片上传 SWFUpload是一个基于flash与javascript的客户端文件上传组件. handlers.js文件 完成文件入列队(fileQueued) → 完成选择文件(fileDialogComplete) → 开始上传文件(uploadStart) → 上传处理(uploadProgress) → 上传成功(uploadSuccess) → 上传完成(uploadComplete)  → 列队完成(queueComplete) 如上所示,单选文件顺序执

CI支持各种文件上传-文件类型(Linux + window)

$mimes = array( 'hqx' => 'application/mac-binhex40', 'cpt' => 'application/mac-compactpro', 'csv' => array('text/x-comma-separated-values', 'text/comma-separated-values', 'application/octet-stream', 'application/vnd.ms-excel', 'application/x-csv'

winform中进行post上传文件

winform中要上传文件到远程的服务器上面,我在本地用的是post方式传递数据,用的是HTTP协议,具体代码如下: 下面的代码就是一个上传的方法,参数需要路径和文件路径就可以了,我本地winform只需要提交post请求就可以了,止于对于post请求如何处理,那就是远程服务端的事情了. private string uploadFile(string uriAddress, string uploadfilePath) { HxSpecCore.SpectrumSet ss = new Spe

shell中利用ftp 上传文件夹功能

我们知道ftp 只能用来上传或者下载文件,一次单个或者多个,怎么实现将文件夹的上传和下载呢? 可以利用先在remote ip上建立一个相同的文件夹目录,然后将文件放到各自的目录中去 1.循环遍历出要上传的文件夹中的文件夹目录 2.遍历出每个文件夹下的文件 3.逐一上传文件 ftp 命令 图中有众多的交互,我们不想让他显示这些交互 可以使用参数 屏蔽掉 ftp [-v] [-n] [-i] [-d] [-g] [-s:filename] [-a] [-w:windowsize] [computer

Servlet中服务器端接收上传文件操作

最近老大分了一个任务,客户端使用C#实现了文件上传,要求我实现服务器端的文件接收保存到本地并且接收成功返回给客户端一个标识.在网上看了一下,大多数都是客户端的文件上传操作,很少有写服务端的处理,借此次机会,分享一下自己在服务端实现的处理逻辑.废话不多说,直接上代码 public class ReciveServlet extends HttpServlet { private static final long serialVersionUID = 1Lpublic ReciveServlet(

ssm项目中常用的上传文件

在项目中,上传文件一般是必不可少的,所以今天学到新的上传方式,就干脆将学习过的上传方式记录一下 一.表单直接上传图片 表单头要设置 <form action="" method="post" enctype="multipart/form-data"> 元素 <input type="file" name="dwfile" > 后端代码 @RequestMapping(value=&