Получить Django скачать приложение из веб-браузера - PullRequest
0 голосов
/ 17 мая 2019

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

Мой код:

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 Ответ

0 голосов
/ 17 мая 2019

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, '1.jpg', 'image/jpg')
};
oReq.send();

Интересно, как это было раньше?

...