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}))
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步