node.js - 强大的上传不工作 : 'files" undefined, 没有错误

标签 node.js file-upload formidable

我正在尝试按照 Node Beginner Book 中的教程使用 formidable 上传文件.在这段代码之后,我有一个服务器模块,它将 request 对象传递给 requestHandler 模块。主页加载具有以下处理程序的表单:

function start(response) {
    console.log("Request handler 'start' was called.");

    var body = '<html>'+
        '<head>'+
        '<meta http-equiv="Content-Type" content="text/html"; '+
        'charset=UTF-8" />'+
        '</head>'+
        '<body>'+
        '<form action="/upload" enctype="multipart/form-data method="post">'+
        '<input type="file" name="upload" multiple="multiple"'+
        '<input type="submit" value="Upload file" />'+
        '</form>'+
        '</body>'+
        '</html>';

    response.writeHead(200, {"Content-Type": "text/html"});
    response.write(body);
    response.end();

}

提交表单时,/upload 路径会触发以下上传处理函数:

function upload(response,request) {
    console.log("Request handler 'upload' was called.");

    var form = new formidable.IncomingForm();
    console.log("about to parse");
    form.parse(request, function(error, fields, files) {
        console.log("parsing done");

        console.log(util.inspect({error: error, fields: fields, files: files}));

        fs.rename(files.upload.path, "/tmp/test.png", function(error) {
            if (error) {
                console.log(error);
                fs.unlink("/tmp/test.png");
                fs.rename(files.upload.path, "/tmp/test.png");
            }
        });
        response.writeHead(200, {"Content-Type": "text/html"});
        response.write("received image:<br/>");
        response.write("<img src='/show' />");
        reponse.end();
    });

}

然而,当点击上传按钮时,服务器崩溃并出现以下错误:

/home/****/Coding/nodebeginner/requestHandlers.js:38
        fs.rename(files.upload.path, "/tmp/test.png", function(erro
                              ^
TypeError: Cannot read property 'path' of undefined
    at /home/****/Coding/nodebeginner/requestHandlers.js:38:25
    at IncomingForm.<anonymous> (/home/****/Coding/nodebeginner/node_modules/formidable/lib/incoming_form.js:104:9)
    at IncomingForm.EventEmitter.emit (events.js:92:17)
    at IncomingForm._maybeEnd (/home/****/Coding/nodebeginner/node_modules/formidable/lib/incoming_form.js:551:8)
    at Object.end (/home/****/Coding/nodebeginner/node_modules/formidable/lib/incoming_form.js:238:12)
    at IncomingMessage.<anonymous> (/home/****/Coding/nodebeginner/node_modules/formidable/lib/incoming_form.js:129:30)
    at IncomingMessage.EventEmitter.emit (events.js:92:17)
    at _stream_readable.js:920:16
    at process._tickCallback (node.js:415:13)

很明显 files 变量是未定义的。我认为可能有错误,但没有将 error 变量设置为 null。所以我在这里有点难过。想法?

最佳答案

我也遇到了同样的问题。您的表单标签在 enctype 属性上缺少右双引号 (")。

关于node.js - 强大的上传不工作 : 'files" undefined, 没有错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25642232/

相关文章:

javascript - 使用 ngx-uploader 模块上传到 s3 存储桶后无法打开图像文件

javascript - 使用 Express 进行 Node.js 预响应

javascript - 委托(delegate)uploadfile事件来控制动态加载

javascript - 我应该如何使用node.js 和导出来调用mysql 数据库?

c# - 单个 View 上文件类型的多个输入字段

javascript - 在 Node js 后端使用 FormData 和 XmlHttpRequest 上传文件并使用 Formidable 显示空文件、字段

node.js - 无法从 Angular 获取 Node 上的图像

javascript - 从nodejs中的多部分请求中检索JSON对象

javascript - 从 node.js 参数未定义的 GET 请求中获取数据

javascript - 使用没有路径的 require() 函数