在下面的代码中,如果我将文件输出格式更改为output.csv,文件会自动下载,但如果我将格式更改为output.txt,则文件会显示在浏览器上。如何自动下载输出。 txt文件
由于csv文件被下载,因此相同代码的txt文件有什么问题
def downloadcsv(request):
try:
response = {}
output = fq_name+"/"+ "output.txt"
os.system(cmd)
logger.debug(file_name)
response.update({'status':0,'message': 'Success','file_name' : output})
except Exception as e:
response['message'] = "Exception while processing request"
response['status'] = 2
logger.exception(e)
return HttpResponse(JsonResponse(response), content_type="application/json")
$.post("/reports/downloadcsv/", snddata,
function callbackHandler(data, textstatus)
{
if (data.status == 0)
{
document.location.href = data.file_name;
//document.getElementById('my_iframe').src = data.file_name;
}
else if (data.status == 1 || data.status == 2)
{
$('#loading').hide();
alert('Error while processing data');
}
$('#loading').hide();
},
"json"
);
答案 0 :(得分:0)
另外,为什么要使用" application / json"对于.txt文件而不是.json?
很难可靠地控制不同浏览器在服务器端使用某种文件或内容类型执行的操作,因为浏览器的行为符合用户的偏好:在浏览器中打开,打开另存为对话框,在第三方程序中打开,使用插件处理等
您可以尝试HTML5下载属性:http://www.w3schools.com/TAgs/att_a_download.asp
此处提出的其他解决方案:Force to open "Save As..." popup open at text link click for pdf in HTML
答案 1 :(得分:0)
您正在尝试返回 .txt,但它被设置为返回 .json
改变
return HttpResponse(JsonResponse(response), content_type="application/json")
到:
return HttpResponse(JsonResponse(response), content_type="application/default")
我已经尝试过使用此代码并且可以正常工作:
from django.conf import settings
from django.http import HttpResponse, Http404
def download(self, request, path):
file_path = os.path.join(settings.MEDIA_ROOT, path)
if os.path.exists(file_path):
with open(file_path, 'rb') as fh:
response = HttpResponse(fh.read(), content_type="application/default")
response['Content-Disposition'] = 'inline; filename=' + os.path.basename(file_path)
return response
raise Http404