我正在做 W3 学校教程。我想更改所选文件的路径。老实说,我对直接来自 w3 的代码不起作用感到有点惊讶。也许与此同时,语法发生了一些变化?
我尝试将“文件路径”更改为“路径”。想要在
files.filetoupload.filepath
中制作 ${here}
,但它给了我未定义的。不知道该怎么办...
我想更改文件的
dir
,但是 files.filetoupload.filepath
返回未定义而不是字符串。
Error code is: 'ERR_INVALID_ARG_TYPE'
throw new ERR_INVALID_ARG_TYPE(propName, ['string', 'Buffer', 'URL'], path);
TypeError [ERR_INVALID_ARG_TYPE]: The "oldPath" argument must be of type string or an instance of Buffer or URL.
Node version:Node.js v18.12.1.
Formidable version:8.19.2.
var http = require('http');
var formidable = require('formidable');
var fs = require('fs');
http.createServer(function (req, res) {
if (req.url == '/fileupload') {
var form = new formidable.IncomingForm();
form.parse(req, function (err, fields, files) {
var oldpath = files.filetoupload.filepath;
var newpath = 'C:/Users/Your Name/' + files.filetoupload.originalFilename;
fs.rename(oldpath, newpath, function (err) {
if (err) throw err;
res.write('File uploaded and moved!');
res.end();
});
});
} else {
res.writeHead(200, {'Content-Type': 'text/html'});
res.write('<form action="fileupload" method="post" enctype="multipart/form-data">');
res.write('<input type="file" name="filetoupload"><br>');
res.write('<input type="submit">');
res.write('</form>');
return res.end();
}
}).listen(8080);
请告诉我,这里出了什么问题。
不要使用 fs.rename 重命名,而是使用选项 options.filename ,如下所示
var options = {
filename: function (name, ext, part, form) {
const { originalFilename, mimetype} = part;
retrun 'C:/Users/thinkpad/' + originalFilename;
}
}
var form = new formidable.IncomingForm(options );
这意味着这行有问题
var oldpath = files.filetoupload.filepath;
我建议您查看文件 files.filetoupload 的详细信息,看看其中包含哪些元素。你可以添加
console.log(files)
根据上面你会知道filetoupload是一个列表/数组,所以解析它的正确方法是
var oldpath = files.filetoupload[0].filepath
也请更改您的 newpath 变量
var newpath = '/ReplaceWithYourOwn/' + files.filetoupload[0].originalFilename
基本上,这个想法是,您必须通过确定我们自己的files格式进行调试,并将其打印出来以检查解析其元素的最佳方法。