Отправка файла на NodeJS из Angular - PullRequest
0 голосов
/ 21 января 2020

Это распространенный вопрос, однако мне все еще не удалось выполнить эту работу.

Из приложения Angular, использующего uppy, в моем компоненте есть следующий код:

const XHRUpload = require('@uppy/xhr-upload')
    this.uppy = new Uppy({
      id: 'uppyContent',
      debug        : true,
      autoProceed  : false,
      restrictions : {
        //allowedFileTypes : [ 'image/*', 'video/*','audio/*','application/pdf','.obj','.FBX','.OBJ','.fbx' ],
        allowedFileTypes: [fileTypes],
        maxNumberOfFiles: 1
      },
      meta : {
         ProjectID: this.projectID, Componente: componente
      }
    })
      .use(Dashboard, {
        trigger              : '.UppyModalOpenerBtn',
        inline               : true,
        target               : '.DashboardContainer',
        replaceTargetContent : true,
        note                 : fileTypeDescription+' only, 1 file, up to 1 GB',
        maxHeight            : 450,
        metaFields           : [
          { id : 'license', name : 'License', placeholder : 'specify license' },
          {
            id          : 'caption',
            name        : 'Caption',
            placeholder : 'describe what the image is about'
          }
        ]
      })
      .use(XHRUpload, {
        endpoint: this.globalService.API_PATH + 'urluploadhere',
        formData: true,
        fieldName: 'files[]'
      })
      //.use(Tus, { endpoint : this.globalService.API_PATH + 'globalProjectFileUpload', resume : true })
      .use(RestoreFiles, {
        serviceWorker : true,
        indexedDB     : {
          maxFileSize  : 1024 * 1024 * 1024, // 1GB => Each file
          maxTotalSize : 1024 * 1024 * 1024 * 1024 // 1 TB

        }
      })
      .run();

Ниже приведен скриншот моего отладчика Chrome с вкладкой Сеть:

enter image description here

В моем NodeJS У меня есть следующий фрагмент:

var bodyParser = require("body-parser");
app.use(bodyParser.json()); // support json encoded bodies
app.use(bodyParser.urlencoded({ extended: true })); // support encoded bodies

var multer = require( 'multer');
var upload = multer();
app.use(upload.array());

app.post('/v1/urluploadhere', function(req, res) {
  console.log(req.body.files);
  res.end();
});

Тем не менее, он падает со следующим

MulterError: Неожиданное поле

Что я должен сделать, чтобы исправить это?

Спасибо!

1 Ответ

0 голосов
/ 21 января 2020

Попробуйте удалить app.use(upload.array()); строку и используйте app.use(upload.single('field name in the formData')), так как вы пытаетесь загрузить один файл.

А если вы пытаетесь отправить массив файлов, укажите fieldName (files []) в метод массива app.use(upload.array('field name in the formData'));

...