我有一段类似于Python的代码:
with open('test.bin', 'rb') as file:
file_content = file.read()
response = HttpResponse(file_content,
content_type='application/octet-stream')
response['Content-Disposition'] = f'attachment;filename=test.bin'
return response
可能没有文件,所以你应该在某处返回一个错误,但如何做,以便它可以在 AJAX 上读取并输出给用户。
$.ajax({
url: 'test',
type: 'GET',
headers: { 'X-CSRFToken': getCookie('csrftoken'), },
xhrFields: {
'responseType': 'blob'
},
success: function(data, status, xhr) {
var contentDisposition = xhr.getResponseHeader('Content-Disposition');
var matches = /filename=([^;]+)/ig.exec(contentDisposition);
var fileName = (matches[1] || 'untitled').trim();
var blob = new Blob([data], {type: xhr.getResponseHeader('Content-Type')});
var link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
link.download = fileName;
link.click();
},
error: function(xhr, status, error) {
},
});
但事实是,由于xhrFields字段,数据被视为一个blob,所以在xhr.responseText(类型string)中,我得到[objectBlob]
我如何获得下载的文件和错误的情况下错误输出?
1条答案
按热度按时间z31licg01#
那么你有三个选择
1.在服务器上引发异常并在JQuery中处理'error'属性。
1.创建2个视图,一个验证响应,返回错误或下载文件的视图链接/
1.让视图返回一个JSON,例如在错误的情况下返回
{"error": "file doesn't exist"}
,在成功的情况下返回{"file":FILE_BINARY_DATA}