我是nodeJS和Java Script的新手。 我需要实现一种机制来读取从Web客户端发送的nodeJS服务器中的文件。
任何人都可以给我一些指针如何做到这一点?
我在nodeJS文件系统中找到了readFileSync()
,它可以读取文件的内容。但是如何从Web浏览器发送的请求中检索文件?如果文件非常大,那么在nodeJS中读取该文件中内容的最佳方法是什么?
答案 0 :(得分:5)
formidable是一个非常方便的库,用于处理表单。
以下代码是一个功能齐全的示例节点应用程序,我从formidable的github中获取并稍加修改。它只是在GET上显示一个表单,并在POST上处理表单上传,读取文件并回显其内容:
var formidable = require('formidable'),
http = require('http'),
util = require('util'),
fs = require('fs');
http.createServer(function(req, res) {
if (req.url == '/upload' && req.method.toLowerCase() == 'post') {
// parse a file upload
var form = new formidable.IncomingForm();
form.parse(req, function(err, fields, files) {
res.writeHead(200, {'content-type': 'text/plain'});
// The next function call, and the require of 'fs' above, are the only
// changes I made from the sample code on the formidable github
//
// This simply reads the file from the tempfile path and echoes back
// the contents to the response.
fs.readFile(files.upload.path, function (err, data) {
res.end(data);
});
});
return;
}
// show a file upload form
res.writeHead(200, {'content-type': 'text/html'});
res.end(
'<form action="/upload" enctype="multipart/form-data" method="post">'+
'<input type="text" name="title"><br>'+
'<input type="file" name="upload" multiple="multiple"><br>'+
'<input type="submit" value="Upload">'+
'</form>'
);
}).listen(8080);
这显然是一个非常简单的例子,但强大的功能对于处理大型文件也很有用。它使您可以在处理时访问已解析的表单数据的读取流。这允许您在上载数据时处理数据,或将数据直接传输到另一个流中。
// As opposed to above, where the form is parsed fully into files and fields,
// this is how you might handle form data yourself, while it's being parsed
form.onPart = function(part) {
part.addListener('data', function(data) {
// do something with data
});
}
form.parse();
答案 1 :(得分:1)
您需要解析http请求的正文,该请求可以包含HTML文件输入中的文件。例如,当使用带有节点的快速Web框架时,您可以通过HTML表单发送POST请求,并通过req.body.files访问任何文件数据。如果您只是使用节点,请查看“net”模块以帮助解析http请求。