Nodejs: Получить zip-файл из aws s3 url и манипулировать файлами внутри него после распаковки. - PullRequest
0 голосов
/ 03 апреля 2020

Я пытаюсь получить zip-файл, загруженный на aws s3. После того, как этот файл извлечен, я должен извлечь его и отобразить имена файлов внутри папки. Как мне этого добиться? Я новичок в потоковой передаче файлов, и это то, что я делал до сих пор.

import * as aws from "aws-sdk";
import express from "express";
import fs from "fs";
import request from "request";
import * as unzipper from "unzipper";

const config = {
  // credentials
};

const s3Client = new aws.S3(config);
const app = express();

app.use(express.json({
  limit: "1mb"
}));
app.use(express.urlencoded({
  extended: true
}));

app.post("/seturl", async(req, res) => {
  try {
    const url = req.body.url;
    request(url).pipe(fs.createWriteStream('ez.zip'));
    console.log("here");
    const zip = fs.createReadStream('ez.zip').pipe(unzipper.Parse({
      forceStream: true
    }));
    for await (const entry of zip) {
      const fileName = entry.path;
      console.log("///////////", fileName);
      const type = entry.type; // 'Directory' or 'File'
      const size = entry.vars.uncompressedSize; // There is also compressedSize;
      if (fileName === "this IS the file I'm looking for") {
        entry.pipe(fs.createWriteStream('output/path'));
      } else {
        entry.autodrain();
      }
    }
  } catch (error) {
    return Promise.reject(`Error in reading ${error}`);
  }
});

app.listen(5600, (err) => {
  if (err) {
    console.error(err);
  } else {
    console.log("running");
  }
});

Я использую здесь библиотеку unzipper. Если есть что-то лучше, я открыт, чтобы использовать это. На данный момент я получаю ошибку ФАЙЛ-КОНЕЦ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...