2015-12-15 3 views
1

Я пытаюсь прочитать ZIP-файл и вывести его в браузере, получить код, который отображается на странице и сохранить его в виде ZIP-файлаNode.js readFileSync ZIP файл

fs.readFileSync('/dir/file.zip','utf-8') 

Когда я делаю это , Я получаю вывод, который начинается с PK�coG���^�*filename.txt и продолжается дольше. Однако, когда я сохраняю полученный текст в файле file.zip, я не могу извлечь файл. Он говорит о своем поврежденном или не действительном ZIP-файле.

Если я открою очень похожий файл, который у меня есть в Notepad ++, то начало и конец очень похожи. Мне что-то не хватает?

Любые идеи о том, как получить содержимое ZIP-файла, сохраните его, чтобы я мог его извлечь, только используя функцию fs.readFileSync?

+0

ли вы использовать чистый узел модуль HTTP, или использовать некоторые библиотеки как экспресс? –

ответ

0

Вы должны использовать ZLIB модуль nodejs для этих целей https://nodejs.org/api/zlib.html#zlib_zlib_createunzip_options

+0

Что делать, если у меня нет доступа для добавления новых модулей? – pee2pee

+0

нет представление затем .. !! – manish

+0

D'oh. Вывод на экран с использованием кода, который я «выглядел многообещающе» на основе других файлов ZIP, которые я открыл в блокноте ++ – pee2pee

0

ZIP двоичный тип файла, при выводе его в браузере в виде текста и скопировать и вставить текст в текстовый редактор, вам не будет иметь то же значение, что и в исходном файле (вероятно, веб-браузер интерпретирует некоторые его содержимое как HTML-теги и/или копирует-вставляет калечу некоторые двоичные символы и/или сам текстовый редактор будет их калечить) ,

Что нужно сделать, это установить соответствующие заголовки ответов HTTP при обслуживании файла в браузере, чтобы браузер знал. Это ZIP-адрес и может отображать пользователю запрос на загрузку файла. Если вы не отправляете заголовки ответов, браузер просто отобразит содержимое в виде текстового файла, который не имеет смысла.

Взгляните на этот вопрос, который имеет PHP решение:

https://stackoverflow.com/a/10817739/245966

В основном вам нужно установить соответствующий Content-Type и Content-Disposition заголовок, и (необязательно) Content-Length.

setResponseHeader('Content-Disposition: attachment; filename=myfile.zip'); 
setResponseHeader('Content-Type: application/zip'); 
setResponseHeader('Content-Length: ' + fileLengthInBytes); 

Заменить setResponseHeader с соответствующим вызовом вашей структуры HTTP, который устанавливает заголовок ответа.

+0

Помог ли бы downvoter объяснить нижний предел? –

0

Вы пытаетесь прочитать файл почтового индекса в качестве кодировки символов (UTF-8), который, вероятно, следует заменить на «двоичный»

Смежные вопросы