Как использовать динамический путь к файлу, используя Formidable в Node JS? - PullRequest
0 голосов
/ 04 декабря 2018

Моя загруженная форма содержит файл и поле "filepath", которое генерируется динамически и содержит желаемый путь к файлу, который я загружаю.

Пример:

filepath: "assets/images/asset-01-02/"

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

Текущийкод:

const cors = require('cors');
const express = require('express');
const app     = express();
const formidable = require('formidable');

app.use(cors());
app.options('*', cors());

app.post('/upload', (req, res) => {
    var form = new formidable.IncomingForm();
    form.parse(req, (err, fields, files) => {
        if (err) {
            console.log('Error', err)
            throw err
        }
        console.log(fields.filepath); //Output e.g. "assets/images/asset-01-02/"
    })
    form.on('fileBegin', (name, file) => {
        //Need to use fields.filepath after '/public/uploads/' 
        //e.g. __dirname + '/public/uploads/' + fields.filepath + file.name;
        file.path = __dirname + '/public/uploads/' + file.name;
    });
    form.on('file', (name, file) => {
        console.log('Uploaded ' + file.name);
    });
});
app.listen(80, function(){
    console.log('Listening on Port 80...');
});

Мне нужно передать значение fields.filepath в функцию form.on('fileBegin'), но я не уверен, как это сделать.Я не встречал ни одного примера этой конкретной проблемы.

1 Ответ

0 голосов
/ 13 декабря 2018

Насколько я понимаю ваш вопрос, вы пытаетесь отправить 'filepath' с 'multipart / form-data' или с клиента на сервер с загруженными файлами.и вы пытаетесь перехватить и установить этот 'filepath', используя поля 'form.parse' в обратный вызов form.parse.

ваш код не работает просто потому, что обратный вызов form.on ('fileBegin') будет выполняться раньшеобратный вызов form.parse.

здесь порядок выполнения обратного вызова в Formidable. (может изменяться из-за асинхронных функций)

  1. form.on ('fileBegin')
  2. form.on ('file')
  3. form.parse ()
  4. form.on ('end')

вместо передачи 'filepath' с 'form-data ', отправьте его с запросом как localhost / upload? filepath = assets / images / asset-01-02

и получите его как

var filepath = req.query.filepath;

в своем коде

...