我上传的表单有一个文件和一个字段“ 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')
值,但是我不确定该怎么做。我还没有遇到任何有关此特定问题的示例。
答案 0 :(得分:0)
据我所知,您正在尝试将带有“ multipart / form-data”的“ filepath”或带有已上传文件的客户端发送到服务器。 并且您正在尝试使用form.parse'fields'捕获并设置此'filepath'到form.parse回调中。
您的代码无法正常工作,因为form.on('fileBegin')回调将在form.parse回调之前执行。
这是Formidable中回调的执行顺序。(由于异步功能可能会改变)
而不是将'filepath'与'form-data'传递,并通过localhost / upload?filepath = assets / images / asset-01-02之类的查询进行发送
并得到它
var filepath = req.query.filepath;
在您的代码中