jquery ajax 上传文件
html:
<!-- /.tab-pane -->
<div class="tab-pane" id="head_portrait">
<!-- The timeline -->
<div class="user-block">
<div class="col-sm-2">
<img class="img-circle img-bordered-sm" src="{% static ""%}{% truncate_url request.user.userprofile.head_portrait %}" alt="user image">
</div>
<div class="col-sm-6"><form class="form-horizontal ng-pristine ng-valid" role="form" novalidate="" name="form">
<div class="avatar-local-wrap">
<p style="margin-bottom: 0">从电脑里挑选一张好图作为头像吧</p>
<div class="clearfix">
<input placeholder="选择一个文件" disabled="disabled" class="form-control" style="width: 176px;display: inline-block">
<div class="btn btn-default">
<span func="select_upload_file">上传</span>
<input name="file00" type="file" class="hide" form-data="formData" id="startUploadBtn" file-reader="" accept=".jpg,.png,.gif">
</div>
</div>
<div func="msg_error1" class="text-danger hide">对不起,格式错误或文件大小超过2M</div>
<p>支持jpg/png/gif格式图片,文件需小于2M</p>
</div>
<div class="form-group">
<div class="col-sm-offset-0 col-sm-10">
<button type="button" class="btn btn-primary" name="confirm" onclick="UploadFile('#startUploadBtn', 1);">确定</button>
<button type="button" class="btn btn-primary" name="cancel" onclick="UploadFile('#startUploadBtn', 2);">取消</button>
</div>
</div>
</form>
</div> </div>
</div>
<!-- /.tab-pane -->
js:
function UploadFile(selector, action){
//上传文件
if(action == 1){
var form_data = new FormData();
//var name = $('#startUploadBtn').val();
//form_data.append('file', $('#startUploadBtn')[0].files[0]);
var name = $(selector).val();
form_data.append('file', $(selector)[0].files[0]);
form_data.append('name', name);
if($(selector)[0].files[0]){
$.ajax({
url: '/auth/userprofile/2/',
type: 'POST',
data: form_data,
//告诉jQuery不要去处理发送的数据
processData : false,
//告诉jQuery不要去设置Content-Type请求头
contentType : false,
//beforeSend: function(){
// console.log('正上传中,请稍候');
//},
success: function(callback){
callback = JSON.parse(callback)['data'];
if(callback['status'] == 1){
//上传图片成功
location.href = window.location.href;
}else if(callback['status'] == 2){
$('div[func="msg_error1"]').removeClass('hide');
$(selector).parent().prev().attr('placeholder', '选择一个文件');
}else{
//上传图片失败
$(selector).parent().prev().attr('placeholder', '选择一个文件');
}
},
error: function(err){
console.log(err);
}
});
}
}else if(action == 2){
//取消上传文件
$('div[func="msg_error1"]').addClass('hide');
$(selector).val('');
$(selector).parent().prev().attr('placeholder', '选择一个文件');
}
}
views.py:
@login_required
def UploadFile(req):
"""
上传文件
:param req:
:return:
"""
data = {'status':0}
if req.method == "POST":
allow_file_type = ['.png', '.jpg', '.gif']
file_obj = req.FILES.get('file') # get的key与 jQurey post中的数据key相同,form_data.append('file', $('#startUploadBtn')[0].files[0]);
# print(file_obj.size, len(file_obj))
# print(dir(file_obj))
file_type = re.findall('.\w+$',file_obj.name)[0].lower()
if file_obj and file_type in allow_file_type and len(file_obj) <= 2097152: # 判断文件类型为允许的图片类型且文件大小不超过2M,这里的单位是字节,也可以用file_obj.size变量
file_name = '%s%s%s' %(time.strftime('%Y%m%d%H%M%S',time.localtime(time.time())),random.randrange(10000,99999),file_type)
db_ImageField_file_name = 'upload/user_image/%s' %(file_name) # 组合 UserProfile表中head_portrait字段路径,该字段相当于 字符串字段 # 保存文件,这里边传边写,小于2M的先保存到内存,其他的先保存到系统临时文件,然后再保存到目标文件
with open('upload/user_image/%s' %(file_name),'wb+') as fp:
for chunk in file_obj.chunks():
fp.write(chunk) user_set = models.UserProfile.objects.filter(user_id=req.user.id)
user_set.update(head_portrait=db_ImageField_file_name)
data['status'] = 1
else:
data['status'] = 2
return HttpResponse(json.dumps({'data':data}))
jquery ajax 上传文件的更多相关文章
- IE8/9 JQuery.Ajax 上传文件无效
		IE8/9 JQuery.Ajax 上传文件有两个限制: 使用 JQuery.Ajax 无法上传文件(因为无法使用 FormData,FormData 是 HTML5 的一个特性,IE8/9 不支持) ... 
- jQuery ajax上传文件实例
		jQuery ajax上传文件实例 <form id="form" enctype="multipart/form-data"><input ... 
- flask jQuery  ajax 上传文件
		1.html 代码 <div> <form id="uploadForm" enctype="multipart/form-data" > ... 
- jquery ajax 上传文件和传递参数到一个接口的实现方法
		参考:https://blog.csdn.net/qq_15674631/article/details/81095284 参考:https://www.jianshu.com/p/46e6e03a0 ... 
- ASP.NET  Jquery+ajax上传文件(带进度条)
		效果图 支持ie6+,chrome,ie6中文文件名会显示乱码. 上传时候会显示进度条. 需要jquery.uploadify.js插件,稍后会给出下载 前台代码 <%@ Page Langua ... 
- jQuery Ajax 上传文件改进
		如果用户取消上传后 背景 提示自动消失了.... 修正Bug.... 同时也更新了不同上传类型的提示字体大小... 2017-05-26 增加了鼠标释放提示 先看之前的效果: 再看现在的效果: 升级 ... 
- jQuery Ajax 上传文件夹及文件
		我们先来看一下文件夹结构 这是上传处理的: 看一下系统日志: 升级 HTML5文件实现拖拽上传提示效果改进(支持三种状态提示) 拖拽过程详解: 1:文件未拖出文件选择框的时候提示:将要上传的文件或文件 ... 
- asp.net 中使用JQuery Ajax 上传文件
		首先创建一个网页,网页中添加如下代码. <h3>Upload File using Jquery AJAX in Asp.net</h3> <table> < ... 
- jQuery Ajax上传文件
		JS代码: //保存 function btnAdd() { var formData = new FormData($("#frm")[0]); $.ajax({ url: &q ... 
随机推荐
- 关于vue Unexpected identifier  问题
			vue对于es6虽然自带babel转换 但是在index.html文件中并不会发生转换 因此在index.html中使用新的语法会导致低版本浏览器不识别代码因此报出Unexpected identif ... 
- simulate  mdns message
			use dns-sd command simulate mdns message: dns-sd -R test _test._tcp local 1234 a=1111111111111111111 ... 
- python自动化运维之路06
			python中面向对象编程 编程范式: 编程是 程序 员 用特定的语法+数据结构+算法组成的代码来告诉计算机如何执行任务的过程 , 一个程序是程序员为了得到一个任务结果而编写的一组指令的集合,正所谓条 ... 
- iis 7 asp.net ajax post 请求字节过大报错问题解决办法
			遇到一个ajax post 提交新闻资讯类的文章,报 {"Message":"There was an error processing the request.&quo ... 
- python列表[]中括号
			names = ['jack', 'rose', 'tom', 'jerry', 'jerry'] print(names) print(names[0]) names[0] = 'adam' # 改 ... 
- eclipse集成svn后总是弹出 Password Required问题解决方法
			最近在集成svn后,在打开eclipse后总是一遍遍的弹出 Password Required,即使输入正确的用户名以及密码也会弹出,最后发现是eclipse的Network Connections ... 
- php and mysql 常用api函数
- CMS垃圾回收
			最近在学习JVM和GC调优,今天总结下CMS的一些特点和要点,让我们先简单的看下整个堆年轻代和年老代的垃圾收集器组合(以下配合java8完美支持,其他版本可能稍有不同),其中标红线的则是我们今天要着重 ... 
- C语言基础:二维数组                                                    分类:            iOS学习  c语言基础             2015-06-10 21:42    16人阅读    评论(0)    收藏
			二维数组和一位数组类似. 定义: 数据类型 数组名[行][列]={{ },{ }....}; 定义时,一维(行)的长度可以省略,但是二维(列)的长度不可以省略.但是访问时,一定使用双下标. 二维数组的 ... 
- IOS 作业项目(1) 关灯游戏 (百行代码搞定)
			1,准备工作,既然要开关灯,就需要确定灯的灯的颜色状态 首先想到的是扩展UIColor 
