使用django上传文件 主流有两种方法 from表单以及ajax,为了自由度高一点,选择了ajax来实现文件的上传

前端部分代码如下: 主要关注

一 有一个文件上传(type='file')的按钮,绑定了id f

二 有一个submit按钮来确认文件上传 绑定id  FileUpload

  1. <div class="form-group">
  2. <label for="exampleInputFile">File input</label>
  3. <input type="file" id="f">
  4. <p class="help-block">Example block-level help text here.</p>
  5. </div>
  6. </div>
  7. <!-- /.box-body -->
  8. <div class="box-footer">
  9. <button type="submit" class="btn btn-primary" id="FileUpload">Submit</button>
  10. </div>
  11. </div>

JS代码如下

需要注意的是 绑定了submit点击事件,点击了之后通过FromData 方法 把文件以字典  f  : $("#f")[0].files[0]); 方式传递给前端 $("#f")[0]是把JQ转换为JS对象

  1. files[0]是获取文件,因为可能有很多文件,这里的意思是获取第一个文件。
  1. $("#FileUpload").click(function () {
  2. var formdata = new FormData();
  3. formdata.append("csrfmiddlewaretoken", $("[name='csrfmiddlewaretoken']").val());
  4. formdata.append("f", $("#f")[0].files[0]);
  5. // console.log("asdasdas")
  6. $.ajax({
  7. url: "/assets/api/",
  8. type: "post",
  9. data: formdata,
  10. contentType: false,
  11. processData: false,
  12. success: function (data) {
  13. alert("上传成功!")
  14. }
  15. })
  16.  
  17. })

后端代码

通过mession的值做不同的任务

  1. def api(request):if request.method == "POST" and request.POST.get('mession') == "fileupload":
  2. f_obj = request.FILES.get("f")
  3. print(f_obj)
  4. name = f_obj.name
  5. print(name)
  6.  
  7. destination = open(os.path.join("/opt/upload", name), 'wb+') # 打开特定的文件进行二进制的写操作
  8. for chunk in f_obj.chunks(): # 分块写入文件
  9. destination.write(chunk)
  10. destination.close()
  11.  
  12. return HttpResponse("上传成功")

在文件传输的过程中,发现部分文件无法传输,发现django对文件的大小有限制,修改settings.py配置文件

  1. from django.core.files.uploadedfile import InMemoryUploadedFile
  2. from django.core.files.uploadhandler import TemporaryFileUploadHandler
  3. FILE_UPLOAD_HANDLERS = [
  4. 'django.core.files.uploadhandler.MemoryFileUploadHandler',
  5. 'django.core.files.uploadhandler.TemporaryFileUploadHandler',
  6. ]
  7.  
  8. FILE_UPLOAD_MAX_MEMORY_SIZE = 8621440
  9. DATA_UPLOAD_MAX_MEMORY_SIZE = 8621440
  10. DATA_UPLOAD_MAX_NUMBER_FIELDS = 5000

django 文件上传样例以及遇到的一些问题的更多相关文章

  1. python_way day21 Django文件上传Form方式提交,原生Ajax提交字符处啊,Django文件上传之原生Ajax方式、jQuery Ajax方式、iframe方式,Django验证码,抽屉示例,

    python_way day21 1.Django文件上传至Form方式 2.原生Ajax文件上传提交表单 使用原生Ajax好处:不依赖jquery,在发送一个很小的文件或者字符串的时候就可以用原生A ...

  2. django文件上传、图片验证码、抽屉数据库设计

    1.Django文件上传之Form方式 settings.py, ALLOWED_HOSTS = ['*'] INSTALLED_APPS = [ 'django.contrib.admin', 'd ...

  3. Django文件上传下载与富文本编辑框

    django文件上传下载 上传 配置settings.py # 设定文件的访问路径,如:访问http://127.0.0.1:8000/media/就可以获取文件 MEDIA_URL = '/medi ...

  4. django文件上传和序列化

    django实现文件上传 使用form表单上传文件 html页面 <html lang="en"> <head> <meta charset=&quo ...

  5. django文件上传

    -------------------上传图片-------------------1.model中定义属性类型为models.ImageField类型 pic=models.ImageField(u ...

  6. Python Web框架篇:Django文件上传

    上传方式: - Form表单上传文件 - Ajax上传文件 - 基于form表单和iframe自己实现ajax请求 1,创建项目 2,settings配置(注册app01,static路径等等这些)及 ...

  7. Django文件上传(经典上传方式)

    经典文件上传方式 创建URL from django.contrib import admin from django.urls import path from django.conf.urls i ...

  8. django——文件上传_分页_ajax_富文本_celery

    上传文件 概述 当Django在处理文件上传时,文件的数据被存储在request.FILES属性中 FILES只有在请求的方法为POST且提交的form表单带有enctype="multip ...

  9. django 文件上传(阿里云oss)下载(支持大文件下载)

    1.文件上传 Models 设计 class Upload_File(models.Model): image = models.FileField(upload_to='file/%Y/%m',de ...

随机推荐

  1. firewalld介绍

    (1).什么是firewalld? firewalld是提供了支持网络/防火墙区域(zone)定义网络链接以及接口安全等级的动态防火墙管理工具. (2).firewalld与iptables之间的关系 ...

  2. zip炸弹

    故障系统有人提了zip炸弹的故障,了解了一些关于zip炸弹的常识. 42.zip 是很有名的zip炸弹.一个42KB的文件,解压完其实是个4.5PB的“炸弹”. 更有甚者,一个叫做 droste.zi ...

  3. Python生成随机数组的方法小结

    Python生成随机数组的方法小结 本文实例讲述了Python生成随机数组的方法.分享给大家供大家参考,具体如下: 研究排序问题的时候常常需要生成随机数组来验证自己排序算法的正确性和性能,今天把Pyt ...

  4. 容器版Jenkins连接Kubernetes---------非容器版jenkins是无法安装kubenetes插件的,所以无法连接k8s

    容器版Jenkins连接Kubernetes 特别注意:必须用谷歌浏览器,而且非容器版jenkins是无法安装kubernetes插件的,所以无法连接k8s 一.环境说明 OS系统版本:Ubuntu ...

  5. appium(toast处理)

    from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expec ...

  6. LOJ #10131 「一本通 4.4 例 2」暗的连锁

    LOJ #10131 「一本通 4.4 例 2」暗的连锁 给一棵 \(n\) 个点的树加上 \(m\) 条非树边 , 现在需要断开一条树边和一条非树边使得图不连通 , 求方案数 . $n \le 10 ...

  7. Spring Boot 创建动态定时任务

    1,日期格式转换 //定时任务格式转换public static String convertCronTime(Date jobDate){ //https://blog.csdn.net/qq_39 ...

  8. (二十八)动态盐的MD5加密算法(java实现)

    目录 文章目录 @[toc] 源代码: 函数用法讲解: 用法代码实例: 对比普通 **`MD5`** 的优点 实现思路: 后来我发现,BCryptPasswordEncoder 是这个思路的实现的最优 ...

  9. AC自动机fail树上dfs序建线段树+动态memset清空

    题意:http://acm.hdu.edu.cn/showproblem.php?pid=4117 思路:https://blog.csdn.net/u013306830/article/detail ...

  10. ~ android与ios的区别

    Oracle与Mysql的区别 项目类别 android ios 应用上 可以使用常用的android模拟器,来模拟各种android设备 只能直接使用iphone或ipad进行测试 开发语言 基于L ...