如果您正在阅读本文,那么您可能正在关注Manuel Kiessling的Node教程。完成本教程的文件上传部分时,我收到以下错误。
fs.rename(files.upload.path, "img/img.jpg", function(error) {
^
TypeError: Cannot read property 'path' of undefined
首先,本教程确实以错误的顺序传递请求和响应。我做的第一件事是改变了从(response, request)
到(request, response)
的顺序。 (确保无处不在)。这是因为我很确定onRequest
的HTTP
中的createServer()
函数按此顺序传递它们。
一旦我这样做,我仍然得到同样的错误。但是通过记录来自我的表单的信息
...
var form = new formidable.IncomingForm();
console.log("About to parse...");
form.parse(request, function(error, fields, files) {
console.log("Parsing done.");
console.dir(request.headers);
console.log(fields);
console.log(files);
...
我注意到fields
键包含我正在寻找的东西,而files
键是空的。
{ upload: '2015-03-08 14.54.06.jpg', 'Upload File': 'Submit' }
{}
从这里可以清楚地看到我可以使用fields.upload
。使用它返回另一个错误,它不是一个字符串(或至少没有一个强大的可以接受)。 toString()
似乎也没有用,所以我使用了备用转换:
fs.rename(fields.upload + "", "img/img.jpg", function(error) {
...
}
哪个不理想,但它确实做到了。
这是用[email protected]
和[email protected]
完成的。我不知道我的解决方案是否适用于所有人,但希望它能指出你们中的一些人正朝着正确的方向前进。这种差异可能是因为他在教程中使用了旧版本的节点和强大的功能。
我有同样的问题,使用相同的教程。结果我在requestHandlers start()函数中输入了一个打印HTML表单的拼写错误。我有
'<form action="/upload" enctype="multipart/form-date" ' +
什么时候应该
'<form action="/upload" enctype="multipart/form-data" ' +
(将“日期”更改为“数据”)。解决这个问题使它对我有用。
因此,请仔细查看requestHandlers start()函数中的HTML表单数据,看看是否存在阻止文件上传正确发生的拼写错误。
我有同样的错误,因为输入字段的名称与fs.rename尝试使用的不同。
基本上要确保这一行中的名称:
'<input type="file" name="UPLOADEDIMAGE">'+
与这两行相同:
fs.rename(files.UPLOADEDIMAGE.path, "/tmp/test.png", function(err) {
fs.rename(files.UPLOADEDIMAGE.path, "/tmp/test.png");
我得到了同样的问题,并且只是为了最终发现我做了一个错字而奋斗了很多。
我输入了什么:
res.write('<form action="fileupload" method="post" enctype="multipart/formdata">');
应该是什么:
res.write('<form action="fileupload" method="post" enctype="multipart/form-data">');
请注意-
中缺少的form-data
。