强大的文件中的文件问题。抛出错误 ERR_INVALID_ARG_TYPE

问题描述 投票:0回答:2

我正在做 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);

请告诉我,这里出了什么问题。

javascript node.js forms parsing formidable
2个回答
0
投票

不要使用 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 );

0
投票

这意味着这行有问题

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格式进行调试,并将其打印出来以检查解析其元素的最佳方法。

© www.soinside.com 2019 - 2024. All rights reserved.