Почему в Express.js мой загруженный файл имеет размер, отличный от размера файла на сервере? - PullRequest
3 голосов
/ 14 марта 2019

Мой код express.js очень прост:

app.get("/download", download);

и

export let download = async (req: Request, res: Response) => {
  const file = "/tmp/my-file.zip";
  res.download(file);
}

Мой код клиента также прост:

import axios from "axios";
const fileDownload = require("js-file-download");

axios.get("/download").then(response => {
  fileDownload(response.data, "export.zip");
});

При загрузке сбраузер, файл поврежден, и я не могу его открыть.Оригинальный /tmp/my-file.zip составляет 119506 байт.Странно, но export.zip загружено 216980 байт.В данный момент я запускаю все локально, поэтому нет различий в операционной системе, которые могли бы объяснить это.

Почему размеры моего файла отличаются (что приводит к повреждению файла .zip) и как я могу это исправить?

Правка - это заголовки браузера:

accept-ranges: "bytes"
cache-control: "no-store, no-cache, must-revalidate, proxy-revalidate"
connection: "keep-alive"
content-disposition: "attachment; filename="my-file.zip""
content-length: "119506"
content-type: "application/zip"
date: "Thu, 14 Mar 2019 06:04:28 GMT"
etag: "W/"1d2d2-1697acd3f53""
expires: "0"
last-modified: "Thu, 14 Mar 2019 06:04:25 GMT"
pragma: "no-cache"
referrer-policy: "no-referrer"
surrogate-control: "no-store"
x-content-type-options: "nosniff"
x-frame-options: "SAMEORIGIN"
x-xss-protection: "1; mode=block"

1 Ответ

1 голос
/ 14 марта 2019

Я нашел решение в этом сообщении . Поскольку axios responseType по умолчанию является json

// responseType указывает тип данных, которые сервер будет ответить // опциями 'arraybuffer', 'blob', 'document', 'json', 'text', 'stream' responseType: 'json', // default

axios.get('/download',{ responseType:'arraybuffer'})
.then(function (response) {
    console.log('########### HEADERS: ', response.headers);
    console.log('########### AXIOS: ', response.data.length);
  fileDownload(response.data, "export.zip");
});

Надеюсь, это сработает:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...