日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

上传文件返回数据提示下载

發布時間:2024/4/14 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 上传文件返回数据提示下载 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?摘要:

  ?最近項目中出現上傳文件返回的json數據會被提示下載,只有在ie10+中才會出現這個問題。前端使用jQuery的插件ajaxForm提交表單,后臺返回的數據格式為json。代碼如下:

?

?后端Python:

def jsonp(func):"""Wraps JSONified output for JSONP requests."""@wraps(func)def decorated_function(*args, **kwargs):callback = request.args.get('callback', False)temp_content = func(*args, **kwargs)if isinstance(temp_content, dict):temp_content.setdefault('success', True)temp_content.setdefault('code', 200)try:temp_content = json.dumps(temp_content, indent=4)except UnicodeDecodeError:try:temp_content = ujson.dumps(temp_content)except StandardError as e:logger.exception(e)temp_content = json.dumps({'success': False, 'code': 500, 'info': 'INVALID_CONTENT'})temp_content = cgi.escape(temp_content)if callback:# 依據 http://evilcos.me/?p=425,jsonp添加/**/頭部會安全一些content = '/**/' + str(callback) + '(' + temp_content + ')'mimetype = 'application/javascript'headers = {'charset':'utf-8'}return current_app.response_class(content, mimetype=mimetype,headers=headers)else:mimetype = 'application/json'headers = {'charset':'utf-8'}content = temp_contentreturn current_app.response_class(content, mimetype=mimetype,headers=headers)elif isinstance(temp_content, basestring):temp_content = cgi.escape(temp_content)return temp_contentelse:return temp_contentreturn decorated_function@mod.route('/patch/install.json', methods=['POST']) @jsonp def patch_install():return {'data': 'data'}

?

前端js代碼:

$('#form').ajaxSubmit({url : '/patch/install.json',type : 'post',dataType : 'json',iframe : true,success: function(res) {// code } });

?

解決辦法:

  需要將后端返回的數據格式改成text/html格式的,如下:

def plain(func):"""wrap text/html reponse"""@wraps(func)def _inner(*args, **kwargs):resp = func(*args, **kwargs)if isinstance(resp, dict):resp.setdefault('success', True)resp.setdefault('code', 200)resp = json.dumps(resp)resp = cgi.escape(resp)return current_app.response_class(resp, mimetype='text/html', headers={'charset': 'utf-8'})elif isinstance(resp, basestring):resp = cgi.escape(resp)return current_app.response_class(resp, mimetype='text/html', headers={'charset': 'utf-8'})else:return respreturn _inner@mod.route('/patch/install.json', methods=['POST']) @plain def patch_install():return {'data': 'data'}

?

注意:此例后端是用Python,如果項目中遇到同樣問題,改成對應語言。

總結

以上是生活随笔為你收集整理的上传文件返回数据提示下载的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。