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 上传文件的更多相关文章

  1. IE8/9 JQuery.Ajax 上传文件无效

    IE8/9 JQuery.Ajax 上传文件有两个限制: 使用 JQuery.Ajax 无法上传文件(因为无法使用 FormData,FormData 是 HTML5 的一个特性,IE8/9 不支持) ...

  2. jQuery ajax上传文件实例

    jQuery ajax上传文件实例 <form id="form" enctype="multipart/form-data"><input ...

  3. flask jQuery ajax 上传文件

    1.html 代码 <div> <form id="uploadForm" enctype="multipart/form-data" > ...

  4. jquery ajax 上传文件和传递参数到一个接口的实现方法

    参考:https://blog.csdn.net/qq_15674631/article/details/81095284 参考:https://www.jianshu.com/p/46e6e03a0 ...

  5. ASP.NET Jquery+ajax上传文件(带进度条)

    效果图 支持ie6+,chrome,ie6中文文件名会显示乱码. 上传时候会显示进度条. 需要jquery.uploadify.js插件,稍后会给出下载 前台代码 <%@ Page Langua ...

  6. jQuery Ajax 上传文件改进

    如果用户取消上传后 背景 提示自动消失了.... 修正Bug.... 同时也更新了不同上传类型的提示字体大小... 2017-05-26 增加了鼠标释放提示 先看之前的效果: 再看现在的效果: 升级 ...

  7. jQuery Ajax 上传文件夹及文件

    我们先来看一下文件夹结构 这是上传处理的: 看一下系统日志: 升级 HTML5文件实现拖拽上传提示效果改进(支持三种状态提示) 拖拽过程详解: 1:文件未拖出文件选择框的时候提示:将要上传的文件或文件 ...

  8. asp.net 中使用JQuery Ajax 上传文件

    首先创建一个网页,网页中添加如下代码. <h3>Upload File using Jquery AJAX in Asp.net</h3> <table> < ...

  9. jQuery Ajax上传文件

    JS代码: //保存 function btnAdd() { var formData = new FormData($("#frm")[0]); $.ajax({ url: &q ...

随机推荐

  1. .net 外部CSS文件不起作用总结

    外部css文件样式全部不起作用 asp.net 页面引用路径的问题 缺少必须属性<link rel="stylesheet" type="text/css" ...

  2. IE6中CSS常见BUG全集及解决方案——摘自网友

    IE6中CSS常见BUG全集及解决方案 IE6双倍边距bug 当页面内有多个连续浮动时,如本页的图标列表是采用左浮动,此时设置li的左侧margin值时,在最左侧呈现双倍情况.如外边距设置为10px, ...

  3. pos提交提交数据时碰到Django csrf

    我的github(PS:希望star):https://github.com/thWinterSun/v-admin 最近在用Vue写前端代码,再用vue-resource向后台提交数据.项目后台是用 ...

  4. linux physical and virtual addressing modes

    example 1: 特理地址和虚拟地址一致 Physical addressing mode requires no page tables and the CPU does not attempt ...

  5. 打开TestFlight并链接到具体的应用下载界面

    在我们应用正式上线前,许多时候都会有小流量的测试,选取部分核心用户抢先试用,在TestFlight出来之前,一般都是通过企业证书打包,然后提供给用户下载地址,安装测试使用,这个有个不爽之处就是,企业i ...

  6. DevExpress v17.2新版亮点——CodeRush篇(三)

    用户界面套包DevExpress v17.2日前终于正式发布,本站将以连载的形式为大家介绍各版本新增内容.本文将介绍了CodeRush v17.2 的新功能,快来下载试用新版本! 代码格式和清理 文档 ...

  7. ReportViewer遇到的坑

    在VS2010下 使用ReportViewer的时候,用WEB导出报表,报错“”文件生成:本地报表处理期间出错.“. ” “报表定义具有无法升级的无效目标命名空间“http://schemas.mic ...

  8. jQuery一句话实现全选

    一句话实现全选 function selectAll(checkbox){ $('input[type=checkbox]').prop('checked', $(checkbox).prop('ch ...

  9. ue使用

    快捷键CTRL+V:输入代码提示自动补全 编辑器Ultraedit快捷键    说到编辑器的快捷键,VIM是无与伦比的.要反对,也得是带脚踏板的EmaCS.UE还是有差距的,很大差距.注意:VIM是开 ...

  10. 解析Linux中的VFS文件系统机制

    转载:原文地址https://www.ibm.com/developerworks/cn/linux/l-vfs/ 1. 摘要 本文阐述 Linux 中的文件系统部分,源代码来自基于 IA32 的 2 ...