Как правильно сохранить изображения в файловую систему с помощью fs.writeFile? - PullRequest
0 голосов
/ 30 июня 2019

Я не могу понять, как правильно сохранить файл, полученный из грозного файла, в файловую систему, на которой работает мой сервер.

Я могу утешить файлы, но не могузнать, что делать с информацией, предоставленной там.

app.post("/sendImages", (req, res) => {
  const files = req.files;
  Object.keys(files).forEach((key) => {
    console.log(files[key]);
    fs.writeFile('images/' + files[key].name, files[key], 'binary', (error) => {
      if (error) console.log(error);
      else console.log('image created');
    });
  })
});

Этот обработчик запросов прямо здесь создает файлы с правильными именами, но когда я пытаюсь открыть их в VS Code, единственное, что я вижу, это [объект объекта].

Пример файла журнала консоли:

File {
  _events: [Object: null prototype] {},
  _eventsCount: 0,
  _maxListeners: undefined,
  size: 3835864,
  path:
   'C:\\Users\\MY_USER_DIR\\AppData\\Local\\Temp\\upload_b099c61751b3b25772344e20df06a4d9',
  name: '20190602_134136.jpg',
  type: 'image/jpeg',
  hash: null,
  lastModifiedDate: 2019-06-30T15:03:22.060Z,
  _writeStream:
   WriteStream {
     _writableState:
      WritableState {
        objectMode: false,
        highWaterMark: 16384,
        finalCalled: true,
        needDrain: true,
        ending: true,
        ended: true,
        finished: true,
        destroyed: true,
        decodeStrings: true,
        defaultEncoding: 'utf8',
        length: 0,
        writing: false,
        corked: 0,
        sync: false,
        bufferProcessing: false,
        onwrite: [Function: bound onwrite],
        writecb: null,
        writelen: 0,
        bufferedRequest: null,
        lastBufferedRequest: null,
        pendingcb: 0,
        prefinished: true,
        errorEmitted: false,
        emitClose: false,
        autoDestroy: false,
        bufferedRequestCount: 0,
        corkedRequestsFree: [Object] },
     writable: false,
     _events: [Object: null prototype] {},
     _eventsCount: 0,
     _maxListeners: undefined,
     path:
      'C:\\Users\\MY_USER_DIR\\AppData\\Local\\Temp\\upload_b099c61751b3b25772344e20df06a4d9',
     fd: null,
     flags: 'w',
     mode: 438,
     start: undefined,
     autoClose: true,
     pos: undefined,
     bytesWritten: 3835864,
     closed: false } }

Я надеюсь, что кто-то из вас скажет мне, что я здесь не так сделал, я новичок в ноде в целом и все еще имею некоторыепроблемы тут и там :)

1 Ответ

0 голосов
/ 01 июля 2019

Вам следует скопировать файлы из папки tmp в папку с изображениями, например так (Node.js >= 8.5.0):

const fs = require('fs');
const util = require('util');
const path = require('path');
const copyFile = util.promisify(fs.copyFile);

app.post('/sendImages', async (req, res) => {
  const files = req.files;
  const results = Object.keys(files).map((key) => {
    const file = files[key];
    const dest = path.join('images/', file.name);
    return copyFile(file.path, dest);
  });
  await Promise.all(results);
  // ...
});

И если вы не хотите сохранять файлы в папку tmp, вам следует проверить APIдокумент для изменения uploadDir.Как Экспресс-грозный :

app.use(formidableMiddleware({
  encoding: 'utf-8',
  uploadDir: 'images/',
  multiples: true
});
...