Как сохранить файловый поток как файл в папке в узле - PullRequest
0 голосов
/ 28 июня 2018

Когда я загружаю файл, сервер возвращает stream, filename, mimetype, encoding. Я не могу понять, как сохранить поток в виде файла на моем сервере. Я попытался fs.createReadStream, я просто не могу понять следующие шаги для него, например, как мне поместить его в папку ./uploads?

 { stream:
  FileStream {
    _readableState: [Object],
    readable: true,
    domain: null,
    _events: [Object],
    _eventsCount: 2,
    _maxListeners: undefined,
    truncated: false,
    _read: [Function] },
 filename: 'test-sample.xlsx',
 mimetype: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
 encoding: '7bit' } }

1 Ответ

0 голосов
/ 30 июня 2018

Мне помог автор apollo-upload-server по этому вопросу. На случай, если кто-то столкнется с этой проблемой, вот как сохранить поток в файл:

const storeFS = ({ stream, filename }) => {
  const uploadDir = './uploads';
  const path = `${uploadDir}/${filename}`;
  return new Promise((resolve, reject) =>
    stream
      .on('error', error => {
        if (stream.truncated)
          // delete the truncated file
          fs.unlinkSync(path);
        reject(error);
      })
      .pipe(fs.createWriteStream(path))
      .on('error', error => reject(error))
      .on('finish', () => resolve({ path }))
  );
}

Источник: https://github.com/jaydenseric/apollo-upload-examples/blob/master/api/resolvers.mjs#L18

...