Лучший способ отправить zip-файл как ответ в функциях Azure, используя узел? - PullRequest
1 голос
/ 03 июня 2019

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

Я могу добиться этого, выполнив следующие шаги:

  1. запрос файла
  2. Сохранить файл локально
  3. Zip каталог, используя
  4. Архиватор читает Zip-файл, конвертирует его в base64
  5. отправить буфер в теле ответа

Скачать и сохранить изображение

const img = await request(url, { encoding: "binary" });
fs.writeFile(filesName, data, "binary", err => {
    if (err) {
        reject(`Error while writing the file; ${err}`);
    } else {
        resolve(data);
    }
});

Заархивируйте каталог, прочитайте ZIP-файл и отправьте ответ

const target = await zipDirectory(dirName, targetFile);
context.log('Target ' + targetFile);
const rawFile = await readFile(targetFile);
const fileBuffer = Buffer.from(rawFile, "base64");
context.res = {
    body: fileBuffer,
    headers: {
    "Content-Disposition": `filename=target.zip`,
    "Content-Type": "application/zip"
},
status: 202
};

Есть ли лучший способ сделать это?

1 Ответ

1 голос
/ 03 июня 2019
  1. Создайте функцию с триггером http, где на входе будет URI изображения и выходная привязка контейнера BLOB-объектов. Логика заключается в том, чтобы сохранить изображение в хранилище BLOB-объектов.

  2. Создайте еще одну функцию, которая запускается BLOB-объектами, которая будет захватывать файл, архивировать его, и он может иметь привязку выходного BLOB-объекта. Это заархивирует файл и поместит его в вашу привязку выходного блоба.

  3. Ваш заархивированный файл будет находиться в контейнере выходных двоичных объектов.

В качестве альтернативы вы можете организовать весь этот процесс с помощью надежной функции.

...