我使用如下代码从文件系统中读取文件。这段代码来自一篇名为 使用Node.js构建文件上传器 的博客文章。
当我运行我的项目时,能够看到UI等内容。
由于我的项目中没有uploads
文件夹(form.uploadDir
),因此我无法使用以下代码:
app.post('/upload', function(req, res){
// create an incoming form object
var form = new formidable.IncomingForm();
// specify that we want to allow the user to upload multiple files in a single request
form.multiples = true;
// store all uploads in the /uploads directory - cannot use it
//form.uploadDir = path.join(__dirname, '/uploads');
// every time a file has been uploaded successfully,
// rename it to it's original name
form.on('file', function(field, file) {
fs.rename(file.path, path.join(form.uploadDir, file.name));
});
// log any errors that occur
form.on('error', function(err) {
console.log('An error has occurred: \n' + err);
});
// once all the files have been uploaded, send a response to the client
form.on('end', function() {
res.end('success');
});
// parse the incoming request containing the form data
form.parse(req);
});
我的问题是如何使用上面的代码从UI获取文件?当我选择我的文件时,需要从表单中获取文件内容。
该应用程序已部署到云端,当我使用localhost时,我使用以下代码(有效)。
const readStream = fs.createReadStream("./file.html");
...
const writeStream = sftp.createWriteStream("/index.html");
...
readStream.pipe(writeStream);
这会在文件系统中创建一个具有正确路径的文件,并用另一个文件(例如此处的 index.html
)覆盖它。
form.on('file'...
的回调函数中,文件不是第二个参数吗? - adeneoform.on('file'...
)打印到控制台(日志正在工作...),以便我能够看到在云中读取了表单中选择的文件内容...因此这有点棘手... - user6124024console.log(file)
是一个常见的方式。 - adeneoconsole.log("the file is-> " + file);
,但是在控制台中我得到了OUT the file is-> [object Object]
的输出。如果我应该写成readStream.pipe(file);
的形式吗?请将其作为答案编写,我会关闭问题。谢谢! - user6124024