Как поменять файлы с помощью JavaScript
Есть ли способ zip файлов с помощью JavaScript? Например, как и в почте Yahoo, когда вы выбрали загрузку всех вложений из электронной почты, она становится зашифрованной и загружается в один ZIP файл. Является ли JavaScript этим? Если да, укажите пример кодирования.
Я нашел эту библиотеку под названием jszip для выполнения этой задачи, но она имеет известные и нерешенные проблемы.
Спасибо.
Ответы
Ответ 1
С новыми API-интерфейсами HTML5 и типизированными массивами вы можете в значительной степени делать все, что захотите, в JavaScript. Однако поддержка браузера не будет большой. Я предполагаю, что вы имели в виду "нерешенные проблемы". Я бы порекомендовал на данный момент сделать это на сервере. Например, в PHP вы можете использовать это расширение.
Ответ 2
На протяжении многих лет JSZip обновлялся. Теперь вы можете найти его на своем репозитории GitHub
Он может использоваться вместе с FileSaver.js
Вы можете установить их с помощью npm:
npm install jszip --save
npm install file-saver --save
И затем импортируйте и используйте их:
import JSZip from 'jszip';
import FileSaver from 'file-saver';
let zip = new JSZip();
zip.file("idlist.txt", 'PMID:29651880\r\nPMID:29303721');
zip.generateAsync({type: "blob"}).then(function(content) {
FileSaver.saveAs(content, "download.zip");
});
Затем вы загрузите zip файл с именем download.zip, как только вы его извлечете, и вы можете найти внутри файла с именем idlist.txt, который имеет две строки:
PMID:29651880
PMID:29303721
И для вашей справки я протестировал со следующими браузерами, и все прошло:
- Firefox 59.0.2 (Windows 10)
- Chrome 65.0.3325.181 (Windows 10)
- Microsoft Edge 41.16299.371.0 (Windows 10)
- Internet Explorer 11.0.60 (Windows 10)
- Opera 52 (Mac OSX 10.13)
- Safari 11 (Mac OSX 10.13)
Ответ 3
JavaScript способен делать это, но не в кросс-браузере, на который вы можете рассчитывать.
Однако это можно сделать легко с помощью серверного языка. Если вы используете PHP, здесь есть документация для функций PHP ZIP: http://php.net/manual/en/book.zip.php
Ответ 4
Я рекомендовал бы идти прямо к использованию узла встроенной в библиотеке Zlib для этого, который включает в себя изображения; кодировать в базе 64, используя "буферы". Вместо использования пакетов npm. Причины:
- Zlib является родной библиотекой Node - постоянно обновляется уже почти 10 лет - так что доказательства там для долгосрочной поддержки
- Узел позволяет работать с буферами - т. Е. Вы можете конвертировать текстовую строку/изображения в исходные двоичные данные и сжимать их с помощью Zlib
- Легко сжимать и распаковывать большие файлы - использовать потоки узлов для сжатия файлов в МБ или ГБ
Тот факт, что вы используете jszip, позволит мне предположить, что вы используете npm, а также узел; Предполагается, что вы настроили среду правильно, т.е. узел установлен глобально.
Пример: input.txt сжат, чтобы стать input.txt.gz
const zlib = require('zlib');
const fs = require('fs');
const gzip = zlib.createGzip();
const input = fs.createReadStream('input.txt');
const output = fs.createWriteStream('input.txt.gz');
input.pipe(gzip).pipe(output);
Шаг 1: Таким образом, вы require
каждый из собственных модулей был из узла - require является частью ES5. Zlib, как ранее упоминалось, и модуль fs
модуль файловой системы.
const zlib = require('zlib');
const fs = require('fs');
Шаг 2: Модуль fs, который позволяет вам создать поток чтения, специально предназначен для чтения фрагментов данных. Это вернет объект readstream; читаемый поток
const input = fs.createReadStream(FILE PATH HERE);
__Примечание: этот объект обратного потока снова получает канал; эта цепочка труб на объектах readsteam может возникать бесконечно, делая трубы очень гибкими.
ReadStream.pipe(DoesSomething).pipe(SomethingElse).pipe(ConvertToWriteStream)
Шаг 3: Объект readstream, который был передан по каналам и сжат, затем преобразуется в объект writestream.
const output = fs.createWriteStream('input.txt.gz');
input.pipe(gzip).pipe(output); // returned filename input.txt.gz, within local directory
Таким образом, эта библиотека позволяет легко ввести путь к файлу и решить, где вы хотите, чтобы ваш сжатый файл был. Вы также можете выбрать обратное, если нужно.