如何在Node JS中使用强大的动态文件路径?

时间:2018-12-04 16:41:37

标签: javascript node.js multipartform-data formidable

我上传的表单有一个文件和一个字段“ 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 :(得分:0)

据我所知,您正在尝试将带有“ multipart / form-data”的“ filepath”或带有已上传文件的客户端发送到服务器。 并且您正在尝试使用form.parse'fields'捕获并设置此'filepath'到form.parse回调中。

您的代码无法正常工作,因为form.on('fileBegin')回调将在form.parse回调之前执行。

这是Formidable中回调的执行顺序。(由于异步功能可能会改变)

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

而不是将'filepath'与'form-data'传递,并通过localhost / upload?filepath = assets / images / asset-01-02之类的查询进行发送

并得到它

var filepath = req.query.filepath;

在您的代码中