Я читал много вопросов, подобных этому, но я действительно не могу понять...
Я использую архиватор и экспресс модулей Node.js. Я хочу просто отправить zip-файл клиенту. Мой код выглядит примерно так:
res.set("Content-Type", "application/zip");
archive = archiver("zip", {store: true});
archive.pipe(res);
При запросе zip-файл передается правильно, но Chrome жалуется:
Ресурс интерпретируется как документ, но передается с помощью приложения/zip типа MIME.
Если я сделаю что-нибудь глупое, например, установлю тип контента на text/json
, я получу:
Ресурс интерпретируется как документ, но передается с типом MIME text/json
Итак, очевидно, то, что я устанавливаю в Node.js, выполняет свою работу, а проблема заключается в чем-то другом. В нем говорится, что ресурс был перенесен с типом MIME applicatioin/zip, но интерпретирован как документ.
Как сделать так, чтобы он не интерпретировался как документ?
Кроме того, я пробовал следующие способы установки типа контента:
res.type("application/zip");
res.contentType("application/zip");
Но я получил тот же результат.
Mozilla же ни на что не жалуется. В некоторых ответах на подобные вопросы говорилось, что это предупреждение можно игнорировать. Мне тоже игнорировать? Может ли проблема заключаться в том, что архив передается непосредственно в объект ответа? Хотя (повторюсь) zip отправляется успешно.
Редактировать:
Настройка Content-Disposition
тоже не работает:
res.set({
"Content-Type": "application/zip",
"Content-Disposition": "attachment; filename='images.zip'"
});
Я также использую <iframe>
для инициации запроса:
document.getElementById("iframe-downloader").src = requestUrl;
Причина в том, что я не хочу перенаправлять страницы. Единственный способ, которым я мог это сделать, был таким.
Редактировать:
Изменение моих настроек Chrome, как указывает этот ответ, также не работает.
Редактировать:
В этом ответе говорится, что это из-за <iframe>
. Если я сделаю запрос через простой <form>
с action="/archive"
, он все равно не сработает.
.src
в iframe сообщает браузеру ОЖИДАТЬ веб-страницу, но вы не отправляете веб-страницу - поэтому предупреждение. Это источник вашей проблемы. Пожалуйста, объясните, чего именно вы пытаетесь достичь на своей веб-странице? Вы просто пытаетесь запустить загрузку файла нажатием кнопки? - person jfriend00   schedule 16.06.2017action
, я все равно получаю предупреждение. - person dodov   schedule 16.06.2017location.href = '/path/to/download.zip'
можно использовать для запуска загрузки без перенаправления при условии, что сервер устанавливает заголовокContent-Disposition
. - person robertklep   schedule 16.06.2017