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. 使用poi导出Excel,并设定单元格内容类型,抛出异常

    本例子使用的是HSSF,为Excel2003提供处理方案. 设定为输入类型为数值 import org.apache.poi.hssf.usermodel.DVConstraint; import o ...

  2. node -- hapi 学习

    node learning 学习node,是为了后续项目可以正常开展,现在写个项目,若不是连接后台,请求数据,一切都不叫着项目了.正好借助掘金的小册,来推进学习 学习资料 YouTube 1 掘金 h ...

  3. JavaScript学习总结(十四)——JavaScript编写类的扩展方法

    在​J​a​v​a​S​c​r​i​p​t​中​可以使​用​类的p​r​o​t​o​t​y​p​e属性来​扩​展​类的属​性​和​方​法,在实际开发当中,当JavaScript内置的那些类所提供的动态 ...

  4. PHP:第一章——PHP中的关键字

    <?php //PHP关键词 /* and //php中的逻辑与运算符.(和) or //php中的逻辑或运算符.(或) xor //php中的逻辑异或.(异或) __FILE__ //php中 ...

  5. zabbix的深入了解

    一,Zabbix Web操作深入 1.1 Zabbix Web下的主机和模版以及监控项的添加方式 (1)创建一个模版 我们所有的功能几乎都是在模版中定义的 我们再点进新创建的模版查看 模版里几乎可以设 ...

  6. 使用pool的多进程,不执行的问题

    from multiprocessing import Pool def fetch_data(idlist,test): pass p=Pool(4) result=[] for i in rang ...

  7. 怎么让wordpress用sqlite3 搭建轻量级博客系统

    wordpress 默认是用mysql作为数据库支持,这个对个人站长来说还是有点麻烦了些.特别是如果以后网站备份迁移就有点事多了. 之前用django开发自己的博客感觉其实用sqlite3作为数据库插 ...

  8. Python 编程核心知识体系-模块|面向对象编程(三)

    模块 面向对象编程

  9. 玩转X-CTR100 l STM32F4 l DHT11温湿度传感器

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] DHT11数字温湿度传感器是一款含有已校准数字信号输 ...

  10. Final阶段第1周/共1周 Scrum立会报告+燃尽图 01

    作业要求[https://edu.cnblogs.com/campus/nenu/2018fall/homework/2411] 版本控制:https://git.coding.net/liuyy08 ...