template html(模板文件):

有如下一个form:

from django importformsclassUploadFileForm(forms.Form):

title= forms.CharField(max_length=50)

file= forms.FileField()

处理这个form的视图收到了在request.FILES中的文件数据。从上述form来的数据可以通过request.FILES['file']来存取。

特别注意的是,只有当request方法是POST,且发送request的

有属性enctype="multipart/form-data"时,request.FILES中包含文件数据,否则request.FILES为空。

以下视图函数:

from django.http importHttpResponseRedirectfrom django.shortcuts importrender_to_responsefrom somewhere importhandle_uploader_filedefupload_file(request):if request.method == 'POST':

form=UploadFileForm(request.POST, request.FILES)ifform.is_valid():

handle_uploaded_file(request.FILES['file'])return HttpResponseRedirect('/success/url')else:

form=UploadFileForm()return render_to_response('upload.html', {'form': form})

必须要将request.FILES传给form的构造函数,才能将文件数据绑定到form.

处理上传文件

字典request.FILES中的每一个条目都是一个UploadFile对象。UploadFile对象有如下方法:

1、UploadFile.read():

从文件中读取全部上传数据。当上传文件过大时,可能会耗尽内存,慎用。

2、UploadFile.multiple_chunks():

如上传文件足够大,要分成多个部分读入时,返回True.默认情况,当上传文件大于2.5M时,返回True。但这一个值可以配置。

3、UploadFile.chunks():

返回一个上传文件的分块生成器。如multiple_chunks()返回True,必须在循环中使用chrunks()来代替read()。一般情况下直接使用chunks()就行。

4、UploadFile.name():上传文件的文件名

5、UplaodFile.size():上传文件的文件大小(字节)

由上面的说明可以写出handle_uploaded_file函数

defhandle_uploaded_file(f):

destination= open('some/file/name.txt', 'wb+')for chunk inf.chunks():

destination.write(chunk)

destination.close()

详细点:

defhandle_uploaded_file(f):

file_name= ""

try:

path= "media/editor" + time.strftime('/%Y/%m/%d/%H/%M/%S/')if notos.path.exists(path):

os.makedirs(path)

file_name= path +f.name

destination= open(file_name, 'wb+')for chunk inf.chunks():

destination.write(chunk)

destination.close()exceptException, e:printereturn file_name

上传文件保存的位置

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

但当上传文件很大时,django会把上传文件写到临时文件中,然后存放到系统临时文件夹中。

改变upload handler的行为

三个设置控制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",)

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

上传文件封装方法:

'''文件上传'''

defhandle_uploaded_file(f):

file_name= ""

try:

path= "media/image" + time.strftime('/%Y/%m/%d/%H/%M/%S/')if notos.path.exists(path):

os.makedirs(path)

file_name= path +f.name

destination= open(file_name, 'wb+')for chunk inf.chunks():

destination.write(chunk)

destination.close()exceptException, e:printereturn file_name

django 上传文件夹_django上传文件相关推荐

  1. hdfs 多个文件合并_hadoop学习笔记3 hadoop程序将本地文件夹中多个文件,合并为一个文件并上传到hdfs中--梦飞翔的地方(梦翔天空)...

    今天梦翔儿,成功实现hadoop编程,将本地文件夹中多个文件,合并为一个文件并上传到hdfs中 直接上代码:PutMerge.java import java.io.IOException; impo ...

  2. ftp文件/文件夹的上传和下载

    ftp文件的下载和删除:https://my.oschina.net/u/3700425/blog/1789570(注意是对文件操作) ftp文件夹的上传:https://blog.csdn.net/ ...

  3. JavaScript开发——文件夹的上传和下载

    我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用. 首先我们需要了解的是上传文件三要素: 1.表单提交方式:post (get方式提交有大小 ...

  4. java实现文件夹的上传和下载

    我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用. 首先我们需要了解的是上传文件三要素: 1.表单提交方式:post (get方式提交有大小 ...

  5. 上传文件夹到nas服务器,文件上传到群晖服务器

    文件上传到群晖服务器 内容精选 换一换 从本地上传日志文件,是指从浏览器所在机器选择日志文件并上传.目前只支持选择*.log的日志文件,如果日志文件中包含其他格式文件,则导入时会提示格式错误,如图2所 ...

  6. SpringBoot 项目将文件图片资源上传到本地静态资源文件夹下(指定文件夹下)

    1.SpringBoot 项目将文件图片资源上传到本地静态资源文件夹下(指定文件夹下) 最终效果: 前端浏览本地文件,点击上传至本地resources/static/images/imgWall下 2 ...

  7. JS开发——文件夹的上传和下载

    文件夹上传:从前端到后端 文件上传是 Web 开发肯定会碰到的问题,而文件夹上传则更加难缠.网上关于文件夹上传的资料多集中在前端,缺少对于后端的关注,然后讲某个后端框架文件上传的文章又不会涉及文件夹. ...

  8. 用ftp上传到服务器视频文件夹,ftp 上传文件夹到服务器

    ftp 上传文件夹到服务器 内容精选 换一换 上传的文件和上传的文件夹中包含的文件支持的格式请参见支持的文件格式.文件上传:从本地上传:在Projects Explorer视图中选中一个文件夹,依次单 ...

  9. 批量上传相册,将一个文件夹下的所有图片,复制到另一个文件夹,仅给出文件夹目录

    package cn.hp.demo01;import java.io.*;/* * 批量上传相册 *将一个文件夹下的所有图片,复制到另一个文件夹 *仅给出文件夹目录*/ public class D ...

最新文章

  1. Microsoft Surface Toolkit Beta 版发布
  2. Android性能优化之图片压缩优化
  3. LeetCode总结 -- 树的遍历篇
  4. python写一个类方法_Python基础|类方法的强制重写与禁止重写
  5. [转]对于非数据库字段的查询过滤以及app_query.append的用法
  6. 利用platform库获取浏览器和操作系统版本
  7. 初学者python笔记(类的继承与多态---详解)
  8. mysql 无法创建用户_无法在MySQL 5.6中创建用户
  9. 庆贺:上传资源时已支持不允许动态调分
  10. c语言中的加减乘除字母,C语言加减乘除运算
  11. tfs php,TFS的原理及应用
  12. Android常用的第三方开源库和框架
  13. Cloudera Manager —— 端到端的企业数据中心管理工具
  14. 测试用例是什么?怎么写?最好实用的测试用例
  15. AAAI 2022 | 改进YOLOv3!IA-YOLO:恶劣天气下的目标检测
  16. 《福布斯》:x86 授权让中国的高科技战略功德圆满
  17. iOS打包发布那些事儿
  18. el-select 多选取值_四柱预测学》第21 四柱八字用神选取方法
  19. 微信小程序多选题Demo
  20. moba游戏研发_为什么像英雄联盟这样的MOBA游戏如此受欢迎?

热门文章

  1. 看我如何作死 | 网络延迟、网络丢包、网络中断一个都没落下过
  2. 学会查看 RabbitMQ日志
  3. 【多媒体开源技术栈】
  4. 全平台硬件解码渲染方法与优化实践
  5. 数据结构与算法之时间复杂度详解
  6. 腾讯DevOps全链路解决方案
  7. 大剑无锋之TCP和HTTP的区别【面试推荐】
  8. 一些 Linux 系统故障修复和修复技巧
  9. 爬虫 spider11——搭建分布式架构通过feign技术,开发服务消费者
  10. leetcode 395. Longest Substring with At Least K Repeating Characters| 395. 至少有 K 个重复字符的最长子串(分治法)