Получить Django скачать приложение из веб-браузера

Я хочу отправить изображение в виде вложения.

Мой код:

resp = FileResponse(open(fullImgPath, "rb"))
resp['Content-Disposition'] = 'attachment; filename="{}"'.format(os.path.basename(fullImgPath))
resp["Content-Type"]="image/%s"%('png' if fullImgPath.endswith('png') else 'jpeg')
return resp

Это работает, если я загружаю файл с помощью requests . Но когда я загружаю файл через браузер (Chrome и Firefox), файл поврежден.

Как я делаю это через браузер (JavaScript):

$.get(requestUrl)
        .success(function(data, textStatus, request){
                SaveBlob(data, "1,jpeg", "image/jpeg")
            }
        })

function SaveBlob(blob, fileName, contentType) {
    var a = document.createElement('a');
    a.href = window.URL.createObjectURL(new Blob([blob], { "type" : contentType }));
    a.download = fileName;
    a.dispatchEvent(new MouseEvent('click'));
}

Это работало раньше! Сегодня я нашел файл, который я получил, поврежден. Однако файл, хранящийся на сервере, является обычным изображением.

В чем дело?

Всего 1 ответ


Jquery не загружает содержимое файла в двоичном виде, поэтому ваше изображение повреждено. Похоже, jquery не поддерживает загрузку как бинарный файл, но вы можете использовать нативный xhr:

function SaveBlob(blob, fileName, contentType) {
    var a = document.createElement('a');
    a.href = window.URL.createObjectURL(new Blob([blob], {"type": contentType}));
    a.download = fileName;
    a.dispatchEvent(new MouseEvent('click'));
}

var oReq = new XMLHttpRequest();
oReq.open("GET", requestUrl, true);
oReq.responseType = "arraybuffer";
oReq.onload = function (oEvent) {
    SaveBlob(oReq.response, Ƈ.jpg', 'image/jpg')
};
oReq.send();

Интересно, как это работало ранее.