上传文件返回数据提示下载
生活随笔
收集整理的這篇文章主要介紹了
上传文件返回数据提示下载
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?摘要:
?最近項目中出現上傳文件返回的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,如果項目中遇到同樣問題,改成對應語言。
總結
以上是生活随笔為你收集整理的上传文件返回数据提示下载的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MFC 标签页
- 下一篇: onvif 开发之video strea