16

私の Web ページでは、ユーザーは圧縮ファイルをアップロードすることになっています。zip ファイル内には、別の zip ファイルと txt ファイルの 2 つのファイルがあります。私のサーバーでは、zipを受け取った後、zipファイルを解凍してzipとtxtファイルを抽出し、それら2つのファイルを事前定義されたフォルダーに移動します。zip ファイルを抽出するコードがありますが、データが正しくないようです。まず、txt ファイルが 1 つしかないはずの zip ファイルと 2 つの txt ファイルを解凍しました。追加の「未定義」txt ファイルが作成されました。また、私の txt ファイルでは、元のデータではなく、「[未定義] [未定義]」というテキストに置き換えられました。
誰でもこれについて私を助けることができますか? 以下は私のコードです:

var JSZip = require('JSZip');

fs.readFile( filePath, function(err, data){
  if (!err){
    var zip = new JSZip();
    JSZip.loadAsync(data).then(function(zip){
      object.keys(zip.files).forEach(function(filename){
        var content = zip.files[filename];
        var dest = path + filename;
        fs.writeFileSync(dest, content);
      });
    });
  }
});
4

4 に答える 4

26

これは私が使用している作業バージョンです:

var jsZip = require('jszip')
jsZip.loadAsync(file).then(function (zip) {
  Object.keys(zip.files).forEach(function (filename) {
    zip.files[filename].async('string').then(function (fileData) {
      console.log(fileData) // These are your file contents      
    })
  })
})

必要な情報のほとんどはhttp://stuk.github.io/jszip/documentation/examples.htmlから取得できますが、1 か所で取得するのは少し難しく、少し調べてみる必要があります。

于 2016-10-10T18:55:24.077 に答える
0

これは、Angular 10 で、単一のファイルをカスタム拡張子の zip に書き込み、後でその同じ zip を読み取って json を取得するという私の戦略です。

ファイルを zip にパッケージ化します (カスタム ファイル末尾がサポートされています)。

import { saveAs } from 'file-saver';
import * as JSZip from 'jszip';

export async function exportJson(
  filename: string,
  jsonToExport: string,
  fileNameEnding = '.zip'
): Promise<string> {
  const jsonFile = new Blob([jsonToExport], {
    type: 'application/json',
  });

  if (!jsonFile) return Promise.reject('Error converting file to JSON');

  const zipper = new JSZip();
  zipper.file(`${filename}.json`, jsonFile);
  const zippedFile = await zipper.generateAsync({ type: 'blob' });

  const exportFilename = `${filename}${fileNameEnding}`;
  saveAs(zippedFile, exportFilename);
  return Promise.resolve(exportFilename);
}

zip からファイルの内容を読み取る

// file parameter retrieved from an input type=file
export async function readExportedJson(file: File): Promise<Blob> {
  const zipper = new JSZip();
  const unzippedFiles = await zipper.loadAsync(file);
  return Promise.resolve(unzippedFiles).then(unzipped => {
    if (!Object.keys(unzipped.files).length) {
      return Promise.reject('No file was found');
    }
    return unzipped.files[Object.keys(unzipped.files)[0]];
  }).then(unzippedFile => zipper.file(unzippedFile.name).async('string'));
}
于 2021-11-11T21:00:09.330 に答える