我是nodeJS和Java Script的新手。 我需要實現一種機制來讀取從Web客戶端發送的nodeJS服務器中的文件。如何讀取nodejs中的文件從Web客戶端發送的服務器
任何人都可以給我一些指針如何做到這一點? 我在nodeJS文件系統中發現了readFileSync()
,它可以讀取文件的內容。但是如何從Web瀏覽器發送的請求中檢索文件?如果文件非常大,那麼在nodeJS中讀取該文件中的內容的最佳方式是什麼?
我是nodeJS和Java Script的新手。 我需要實現一種機制來讀取從Web客戶端發送的nodeJS服務器中的文件。如何讀取nodejs中的文件從Web客戶端發送的服務器
任何人都可以給我一些指針如何做到這一點? 我在nodeJS文件系統中發現了readFileSync()
,它可以讀取文件的內容。但是如何從Web瀏覽器發送的請求中檢索文件?如果文件非常大,那麼在nodeJS中讀取該文件中的內容的最佳方式是什麼?
您將需要解析可以包含來自HTML文件輸入的文件的http請求的正文。例如,在使用帶節點的快速Web框架時,可以通過HTML表單發送POST請求,並通過req.body.files訪問任何文件數據。如果您只是使用節點,請查看'net'模塊以協助解析http請求。
formidable是一個使用表單非常方便的庫。
下面的代碼是一個功能齊全的示例節點應用程序,我從強大的github中取得並稍作修改。它只是顯示上看到一個表單,並處理從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();