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 ...
随机推荐
- Linux系统中切换用户身份su与sudo的用法与实例
日常操作中为了避免一些误操作,更加安全地管理系统,通常使用的用户身份都为普通用户,而非root.当需要执行一些管理员命令操作时,再切换成root用户身份去执行. 普通用户切换到root用户的方式有:s ...
- 简话Angular 08 Angular ajax
一句话: 它们Angular框架声明周期的各个阶段,常规约定各专注于特定功能,经过处理也可以互相替换 1.功能细分简解 $http 类似JQuery ajax,支持promise $http.json ...
- en_a
1◆ai ay ei 2◆ au aw ɔː 3◆ a eɪ æ ɑː ɔː ʌ 4◆ ar ɔː ɑː ɜː 5◆ al ɑː ɔː 6◆ are air ...
- Idea检入boss项目
Idea检入boss项目
- (C#基础) ref 和out练习
对于C#中这两个关键字的用法,常常混淆,有点不清楚,今天又一次看到.遂把它们都记录下来,希望能有所用.这些都是他人写的,我只是搬过来一次,加深印象. 代码 using System; using Sy ...
- 返回值为record类型的函 初始化 内存泄漏 复制
1.函数需要初始化,否则下次调用函数时,Result还是上次的值,可能会引起误判.但是不会有内存泄漏,即使包含string类型的成员. 2.如果record包含的都是值类型的成员,比如integer, ...
- 读书笔记 C# Linq查询之group关键字浅析
在C#中,自从有了Linq查询表达式后,程序员对可被迭代的序列或列表执行一系列的筛选.排序.过滤.分组.查询等操作.本文章所要讲述的是group关键字. Linq查询表达式,是以from关键字开头,以 ...
- MyEclipse教程:使用UML创建模块库——第一部分(二)
MyEclipse 在线购买低至75折!火爆开抢>> [MyEclipse最新版下载] UML1建模文件存储在建模库中,建模可用于生成Java代码,或者可以从代码中生成模型.本教程将向您展 ...
- Exchange Server 2007 多名称证书配置(转载)
原文:http://www.exchangecn.com/exchange2007/20141130_529.html Exchange Server 2007 多名称证书配置 Exchange ...
- UIApplication的详细介绍
UIApplication 什么是UIApplication? UIApplication对象是应⽤程序的象征.每一个应用都有⾃己的UIApplication对象,这个对象是系统自动帮我们创建的, 它 ...