2

我正在 node.js 中编写文件上传器,我遵循了文档,并且在我的 mac 上工作时,文件有时会上传。在我的 Windows 电脑上,文件根本不会上传。

我正在使用 express 框架,并且该应用程序托管在外部服务器上。我在尝试上传时遇到的错误是:

Error: unintialized parser
    at IncomingForm.write (/srv/node/test-app/node_modules/express/node_modules/connect/node_modules/formidable/lib/incoming_form.js:130:17)
    at IncomingMessage.<anonymous> (/srv/node/test-app/node_modules/express/node_modules/connect/node_modules/formidable/lib/incoming_form.js:87:12)
    at IncomingMessage.EventEmitter.emit (events.js:95:17)
    at IncomingMessage.<anonymous> (_stream_readable.js:720:14)
    at IncomingMessage.EventEmitter.emit (events.js:92:17)
    at emitDataEvents (_stream_readable.js:745:10)
    at IncomingMessage.Readable.on (_stream_readable.js:666:5)
    at IncomingForm.parse (/srv/node/test-app/node_modules/express/node_modules/connect/node_modules/formidable/lib/incoming_form.js:86:6)
    at /srv/node/frog-jam/node_modules/express/node_modules/connect/lib/middleware/multipart.js:125:12
    at noop (/srv/node/frog-jam/node_modules/express/node_modules/connect/lib/middleware/multipart.js:22:3)

我通过表单发布图像,在服务器端我有处理文件上传的代码:

fs.rename(req.files.image.path
    , '/path/to/new/folder/' + req.files.image.name
    , function(err) {
        if(err) return res.json(err);
        return res.json({message:'Upload complete'});
    }
);

我已经在此方法中及其周围添加了控制台日志,但似乎它没有进入控制器方法。我自己没有任何中间件来处理文件上传,这条路线上也没有任何中间件。

所有上传目的地也是正确的,因为它偶尔会在我的 mac book 上工作。

4

1 回答 1

4

可能您已将 Node.js 更新到最新版本之一 (> 0.10.5 )。Express.js 在其依赖项中有旧版本的连接,而后者又具有旧版本的强大(负责文件上传的插件)。要解决此问题:

$ cd <project_root>/node_modules/express/node_modules/connect
$ npm install formidable@latest

在那之后你应该很好

于 2013-05-20T07:20:02.297 回答