Ссылка на документ, возвращенный из API - PullRequest
0 голосов
/ 15 января 2019

У меня есть вызов API (функция Azure), который возвращает HttpResponseMessage

var result = await StorageHelper.GetFileFromStorage(filePath);
var response = new HttpResponseMessage(HttpStatusCode.OK)
{
    Content = new ByteArrayContent(result.DocumentAsByteArray)
};

response.Content.Headers.ContentType = new MediaTypeHeaderValue(result.ContentType);

return response;

Я перевариваю это, используя приведенный ниже JavaScript

axios
    .get(
        `${config.apiGatewayURL}/download-file/${file}`)
    .then(response => {
        const myBlob = new Blob([response.data], { type: response.headers['content-type'] });
        const fileURL = URL.createObjectURL(myBlob);
        const a = document.createElement('a');
        document.body.appendChild(a);
        a.href = fileURL;
        a.click();
        document.body.removeChild(a);
    })
    .catch(error => {
        console.log(error);
    });

Если я просматриваю ответ в консоли, я получаю данные файла. И если я вызываю API с помощью Postman, я могу загрузить ответ, сохранить и открыть файл без проблем.

Пример данных консоли:

data: "%PDF-1.5↵%�쏢↵9 0 obj↵<</Length 10 0 R/Filter /Fl...

Однако ... при открытии в браузере кажется, что файл всегда поврежден или что-то в этом роде, поскольку ничего не отображается.

Есть предложения ...?

В дополнение к этому ... когда я смотрю на оригинальный файл в блокноте, первые 3 строки имеют вид

%PDF-1.5
%Çì¢
9 0 obj

Но когда я просматриваю в браузере и сохраняю, первые 3 строки этого файла:

%PDF-1.5
%�쏢
9 0 obj

1 Ответ

0 голосов
/ 15 января 2019

Решено путем замены JavaScript с помощью приведенного ниже. Обратите внимание, что мне пришлось поменять Аксиоса на старую ванильную порцию.

fetch(`${config.apiGatewayURL}/download-file/${file}`)
    .then(response => {
        const blob = response.blob();
        blob.type = response.headers['content-type'];
        return blob;
    })
    .then(blob => {
        const fileURL = URL.createObjectURL(blob);
        const a = document.createElement('a');
        document.body.appendChild(a);
        a.href = fileURL;
        a.click();
        document.body.removeChild(a);
    })
    .catch(error => {
        console.log(error);
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...