Правильные заголовки, но Chrome говорит: "Ресурс интерпретируется как документ"
Я прочитал много вопросов, как этот, но я действительно не могу понять это...
Я использую архиватор и выражаю модули Node.js. Я хочу просто отправить почтовый файл клиенту. Мой код выглядит примерно так:
res.set("Content-Type", "application/zip");
archive = archiver("zip", {store: true});
archive.pipe(res);
По запросу файл zip передается корректно, но Chrome жалуется:
Ресурс интерпретируется как Документ, но передается с приложением MIME-типа /zip
Если я сделаю что-то глупое, например, установив тип содержимого text/json
, Я получил:
Ресурс интерпретируется как Документ, но передается с текстом MIME типа /json
Поэтому, очевидно, то, что я устанавливаю в Node.js, выполняет свою работу, и проблема заключается в другом. В нем говорится, что ресурс был перенесен с помощью MIME-типа applicationatioin /zip, но интерпретирован как Document.
Как сделать так, чтобы он не интерпретировался как Документ?
Также я попробовал эти способы установки типа контента:
res.type("application/zip");
res.contentType("application/zip");
Но я получил тот же результат.
Mozilla, с другой стороны, ни на что не жалуется. В некоторых ответах на подобные вопросы сказано, что это предупреждение можно игнорировать. Должен ли я игнорировать это тоже? Может ли быть проблема в том, что архив передается напрямую к объекту ответа? Хотя (повторюсь) почтовый индекс успешно отправлен.
Редактировать:
настройка 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"
, это все еще не работает.
1 ответ
Я думаю, это означает, что Chrome пытается отобразить файл как веб-страницу, а это не то, что вы хотели.
Добавьте заголовок: Content-Disposition: attachment; filename="filename.ext"
У меня та же проблема; У меня был почтовый запрос на основе формул, в результате которого был создан файл. Именно это предупреждение вызвало наличие MIME Type и Content-Disposition. Я где-то читал, что новые файлы надо открывать в новой вкладке, и предупреждение пропало. (Но также может быть потому, что новая страница открывалась и закрывалась в мгновение ока... поэтому я не мог проверить, появилось ли там это предупреждение)
Best, Янв