使用NodeJS和node-formidable上传文件

Kin*_*ave 12 javascript file-upload serverside-javascript node.js

我成功使用node.js和强大的模块上传文件,保存在磁盘上的文件是某种不良格式(编码错误),例如,如果我上传图像,我无法查看,如果我上传一个txt文件gedit提供以下消息:"gedit无法检测字符编码.请检查您是否尝试打开二进制文件.从菜单中选择一个字符编码,然后重试."

这是代码:

form.encoding = 'utf-8';
form.parse(req, function(err, fields, files) {
    fs.writeFile('test.js', files.upload,'utf8', function (err) {
          if (err) throw err;
          console.log('It\'s saved!');
    });
});
Run Code Online (Sandbox Code Playgroud)

BCG*_*BCG 19

问题是files.upload不是文件的内容,它是来自node-formidable的File类的实例.

看着:

https://github.com/felixge/node-formidable/blob/master/lib/file.js

您可以像这样访问上传文件的路径,而不是尝试再次将文件写入磁盘,并使用fs.rename()将其移动到您想要的位置:

fs.rename(files.upload.path, 'yournewfilename', function (err) { throw err; });
Run Code Online (Sandbox Code Playgroud)


joh*_*ans 4

表单是否设置为 enctype="multipart/form-data"?

我只在 Express 中使用过 formidable - Express 示例运行良好:

https://github.com/visionmedia/express/tree/master/examples/multipart