需要准备文件

http://pan.baidu.com/s/1bp4N3nL   qqi0

html

<script src="{% static 'js/jquery.js' %}"></script>

<script src="{% static 'js/ajaxfileupload.js' %}"></script>

<form class="form-horizontal" action="" enctype="multipart/form-data" method="post" name="adUpload" id="adUpload" accept-charset="utf-8">
<div class="col-sm-9 center-block">
<label class="col-sm-4 control-label">选择上传广告类型</label>
<div class="col-sm-5">
<label class="checkbox-inline">
<input type="radio" id="inlineCheckbox1" name="ad" onclick="adType(1)" checked value="1"> 视频
</label>
<label class="checkbox-inline">
<input type="radio" id="inlineCheckbox2" name="ad" onclick="adType(2)" value="2"> 图片
</label>
</div>
</div>
<br/><br/><br/>
<div class="col-sm-9 center-block">
<label for="inputPassword3" class="col-sm-4 control-label">选择excel文件</label>
<div class="col-sm-3">
{% csrf_token %}
<input type="file" name="file" id="file_upload" class="form-control">
</div>
<input type="button" onclick="ajaxExcelUpload()" class="control-label btn btn-info" value="上传" />  
</div>
</form>

<script>

function ajaxExcelUpload(){
$('#up_pro').show();
//progress_dataUp();
var adType = $("input[type='radio']:checked").val();
$.ajaxFileUpload({
url: '/handleUpload/',
type:'POST',
data: {adType: adType },
secureuri: false,
fileElementId: 'file_upload',
dataType: 'json',
success: function (data, status) {

if(data['res'] == 1){
$('#up_pro').html(data['data']);
$('#up_pro').css('color','#5bc0de');
{# setTimeout(function(){#}
{# $('#up_pro').html('正在进行数据导入,请稍等 ...');#}
{# $('#up_pro').css('color','#333');#}
{# $('#up_pro').hide();#}
{# //location.reload();#}
{# },2000);#}

}
if(data['res'] == 0){
$('#up_pro').html('上传失败!'+data['data']);
$('#up_pro').css('color','#c00');
}

},
error: function (data, status, e) {
console.log(status);
$('#up_pro').html('上传失败!');
$('#up_pro').css('color','#c00');
setTimeout(function(){
$('#up_pro').html('数据导入中,请稍等 ...');
$('#up_pro').css('color','#333');
$('#up_pro').hide();
},2000);
}
});
}

</script>

views.py

@csrf_exempt
def handle_upload(request):
if request.method=="POST":
type = request.POST.get('adType',None)

file = request.FILES.get("file",None)
if file: # 处理附件上传到方法
try:
handle_upload_file(file)

except Exception as e:
pass
data = str(e)
res = 0
result = {'res': res,'data':data}
content = json.dumps(result)
return HttpResponse(content)

def handle_upload_file(filename):
"""
handle_upload_file 上传文件
"""
try:
path = os.path.dirname(os.path.dirname(__file__))+'/static/ad/upload/'
print path
if not os.path.exists(path):
os.makedirs(path)
destination = open(path+filename.name, 'wb+')
for chunk in filename.chunks():
destination.write(chunk)
destination.close()
res = 1
except Exception, e:
print e
res = 0
return res

需要注意的 data

使用ajaxFileUpload上传文件时,有时需要带参数提交,网上有很多资料说使用data,但其实要使用data带参数是需要修改的,否则后台是获取不到的

分析原因:

ajaxFileUpload为了实现无刷新异步提交文件,构建 iframe 然后创建form表单 再将要上传的文件写上去再提交.但是原代码 却没有处理data.所以这块内容需要我们自己加上去.

下面红色部分为修改ajaxFileUpload.js的三处地方:

备注:好像csdn代码中加颜色加粗  有问题这三处修改的地方我直接贴出来,位置看下面的代码,

①createUploadForm: function(id, fileElementId,data);

②jQuery(form).appendTo('body')的前面修改:
if (data) { for (var i in data) { $('<input type="hidden" name="' + i + '" value="' + data[i] + '" />').appendTo(form); } } 

③var form = jQuery.createUploadForm(id, s.fileElementId,s.data);

百度云盘中文件已修改过可以直接使用

python+ajaxFileUpload 无刷新上传文件的更多相关文章

  1. jquery ajax php 无刷新上传文件 带 遮罩 进度条 效果的哟

    在很多项目中都会叫用户上传东西这些的,自从接触了jquery 和ajax之后就不管做什么,首先都会想到这个,我这个人呢?是比较重视客户体验的,这次我这边负责的是后台板块,然后就有一块是要求用户上传照片 ...

  2. ajax +jsp+iframe无刷新上传文件[转]

    http://hi.baidu.com/zj360202/blog/item/f23e3711f929c774cb80c475.html ajax jsp 无刷新上传文件 2009-10-26 16: ...

  3. web 开发之js---巧用iframe实现jsp无刷新上传文件

    首先要说的就是 ajax 是无法实现上传文件的,可以想一下ajax与后台通信都是通过传递字符串,怎么能传递文件呢?其实出于安全考虑js是不能操作文件的,所以就不要再说用ajax来实现文件的上传了,这是 ...

  4. $_FILES参数详解及简单<form>表单无刷新上传文件

    $_FILES:经由 HTTP POST 文件上传而提交至脚本的变量,类似于旧数组$HTTP_POST_FILES 数组(依然有效,但反对使用)详细信息可参阅 POST方法上传 $_FILES数组内容 ...

  5. jQuery+php+ajax实现无刷新上传文件功能

    jQuery+php+ajax实现无刷新上传文件功能,还带有上传进度条动画效果,支持图片.视频等大文件上传. js代码 <script type='text/javascript' src='j ...

  6. Ajax 无刷新上传文件插件 uploadify 的使用

    在表单中无法直接使用 Ajax 上传文件,解决的思路可以是使用插件无刷新地上传文件,返回文件上传后的地址,然后把该地址作为 Ajax 的参数传递给服务器端进行数据库处理.可以使用 uploadify ...

  7. ajax无刷新上传文件

    网页上传文件最简单的方式就是通过表单上传了,但是在提交表单的时候会导致网页刷新,但有的时候我们不想网页刷新,有什么办法呢,我们可以使用ajax上传文件来做到这一点.只有ajax还不行,还需要JavaS ...

  8. js无刷新上传文件

    传统的文件上传方式 <form action="" method="POST" enctype="multipart/form-data&quo ...

  9. 通过Ajax使用FormData对象无刷新上传文件

    写在前面:本文说的这个方案有浏览器兼容性问题:所有主流浏览器的较新版本已经支持这个对象了,比如Chrome 7+.Firefox 4+.IE 10+.Opera 12+.Safari 5+,对兼容性比 ...

随机推荐

  1. python中enumerate内置库的使用

    使用enumerate,可以自动进行索引下标的赋值,本例代码中使用enumerate,进行excel单元格的赋值操作. 代码如果重复被调用,可将该代码封装成类进行使用 1 import openpyx ...

  2. 力扣(LeetCode)389. 找不同

    给定两个字符串 s 和 t,它们只包含小写字母. 字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母. 请找出在 t 中被添加的字母. 示例: 输入: s = "abcd&quo ...

  3. Fiddler 简单介绍

    fiddler 也已经使用了几年了,前面做免登录时就是用了fiddler,为了抓取cookie等信息.但是一直没有对他进行整理出一篇文章来介绍其使用. Fiddler的基本介绍 Fiddler的官方网 ...

  4. JS 日期比较方法

    1.日期参数格式:yyyy-mm-dd // a: 日期a, b: 日期b, flag: 返回的结果 function duibi(a, b,flag) { var arr = a.split(&qu ...

  5. Spring Boot设置值:分别用@ConfigurationProperties和@Value给属性设值及其区别

    @ConfigurationProperties给属性映射值编写JavaBean/** 将配置文件application.properties中配置的每一个属性值映射到当前类的属性中:* @Confi ...

  6. H3C常用配置和命令

    邻居发现命令display lldp neighbor-information list DHCP中继配置dhcp enabledhcp relay server-group 1 ip x.x.x.x ...

  7. canvas绘图在手机上边缘粗糙

    辛辛苦苦用canvas绘图,做好动画后,想看看效果,结果在手机上一打开,效果是有了,但是边缘特别粗糙,这怎么可以呢,有一种说法是你用canvas绘图时候在手机retain屏幕上,他把一个像素分为两个像 ...

  8. Confluence 6 删除一个空间

    删除一个空间将会完全删除空间和空间的所有内容,包括有关这个空间的所有日历,和链接到这个空间中的问题.只有具有空间管理员权限的用户才能够完全删除一个空间.  删除空间是完全从系统中删除的.一旦你删除了一 ...

  9. 架构探险笔记11-与Servlet API解耦

    Servlet API解耦 为什么需要与Servlet API解耦 目前在Controller中是无法调用Servlet API的,因为无法获取Request与Response这类对象,我们必须在Di ...

  10. 3 爬虫解析 Xpath 和 BeautifulSoup

    1.正则表达式 单字符: . : 除换行以外所有字符 [] :[aoe] [a-w] 匹配集合中任意一个字符 \d :数字 [-] \D : 非数字 \w :数字.字母.下划线.中文 \W : 非\w ...