博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python django + js 使用ajax进行文件上传并获取上传进度案例
阅读量:5057 次
发布时间:2019-06-12

本文共 3107 字,大约阅读时间需要 10 分钟。

    
Document

上传文件:

文件上传进度:

文件上传状态:

后端代码

def upload_files(request):    if request.method == 'POST':        try:            get_file = request.FILES.get('file')            if get_file is not None:                # print type(get_file) # 
# print get_file.read() for con in get_file.readlines(): line = con.strip("\n") if line.startswith("#"): pass else: print line return HttpResponse("success!") else: print u"文件对象是None" return HttpResponse("false!") except Exception, e: print e return HttpResponse("false!")

后面的几种方法没试:

方式一:通过form表单提交到后台前端:    
Title
Django 后端:def upload(request): if request.method == 'POST':# 获取对象 obj = request.FILES.get('fafafa') import os    # 上传文件的文件名     print(obj.name) f = open(os.path.join(BASE_DIR, 'static', 'pic', obj.name), 'wb') for chunk in obj.chunks(): f.write(chunk) f.close() return HttpResponse('OK') return render(request, 'upload/upload.html')
方式二:通过ajax提交前端
JS:Django 后端:def upload_ajax(request): if request.method == 'POST': file_obj = request.FILES.get('file') import os f = open(os.path.join(BASE_DIR, 'static', 'pic', file_obj.name), 'wb') print(file_obj,type(file_obj)) for chunk in file_obj.chunks(): f.write(chunk) f.close() print('11111') return HttpResponse('OK')注意:前台发送ajax请求时:processData: false, // tell jquery not to process the datacontentType: false, // tell jquery not to set contentType必须设置
方式三:通过iframe标签提交前端:   
JS: function UploadFile() { document.getElementById('my_iframe').onload = Testt; document.getElementById('my_form').target = 'my_iframe'; document.getElementById('my_form').submit(); } function Testt(ths){ var t = $("#my_iframe").contents().find("body").text(); console.log(t); }Django 后端:def upload_iframe(request): if request.method == 'POST': print(request.POST.get('user', None)) print(request.POST.get('password', None)) file_obj = request.FILES.get('file') import os f = open(os.path.join(BASE_DIR, 'static', 'pic', file_obj.name), 'wb') print(file_obj,type(file_obj)) for chunk in file_obj.chunks(): f.write(chunk) f.close() print('11111') return HttpResponse('OK')以上是文件上传的三种方式,在Tornado种也可以使用。扩展:在前段提交的时候 可以存在 checkbox 标签, 在Django中对于这种标签在后台获取值时用:  request.POST.getlist('favor', None) checkbox其它request.POST.get('favor', None) checkbox

转载于:https://www.cnblogs.com/nyist-xsk/p/10184937.html

你可能感兴趣的文章
SpringBoot使用其他的Servlet容器
查看>>
关于cookie存取中文乱码问题
查看>>
mysql 多表管理修改
查看>>
group by order by
查看>>
Oracle学习之简单查询
查看>>
log4j配置
查看>>
linux 配置SAN存储-IPSAN
查看>>
java学习笔记之String类
查看>>
pymysql操作mysql
查看>>
Linux服务器删除乱码文件/文件夹的方法
查看>>
牛腩记账本core版本源码
查看>>
Word Break II
查看>>
UVA 11082 Matrix Decompressing 矩阵解压(最大流,经典)
查看>>
jdk从1.8降到jdk1.7失败
查看>>
一些关于IO流的问题
查看>>
mongo备份操作
查看>>
8 -- 深入使用Spring -- 3...1 Resource实现类InputStreamResource、ByteArrayResource
查看>>
硬件笔记之Thinkpad T470P更换2K屏幕
查看>>
一个关于vue+mysql+express的全栈项目(六)------ 聊天模型的设计
查看>>
【知识库】-数据库_MySQL 的七种 join
查看>>