javascript 从服务器下载文件,如果有错误,则输出错误

vxf3dgd4  于 2023-04-19  发布在  Java
关注(0)|答案(1)|浏览(201)

我有一段类似于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]
我如何获得下载的文件和错误的情况下错误输出?

z31licg0

z31licg01#

那么你有三个选择
1.在服务器上引发异常并在JQuery中处理'error'属性。
1.创建2个视图,一个验证响应,返回错误或下载文件的视图链接/
1.让视图返回一个JSON,例如在错误的情况下返回{"error": "file doesn't exist"},在成功的情况下返回{"file":FILE_BINARY_DATA}

相关问题