2012-11-29 111 views
3

我是nodeJS和Java Script的新手。 我需要實現一種機制來讀取從Web客戶端發送的nodeJS服務器中的文件。如何讀取nodejs中的文件從Web客戶端發送的服務器

任何人都可以給我一些指針如何做到這一點? 我在nodeJS文件系統中發現了readFileSync(),它可以讀取文件的內容。但是如何從Web瀏覽器發送的請求中檢索文件?如果文件非常大,那麼在nodeJS中讀取該文件中的內容的最佳方式是什麼?

回答

1

您將需要解析可以包含來自HTML文件輸入的文件的http請求的正文。例如,在使用帶節點的快速Web框架時,可以通過HTML表單發送POST請求,並通過req.body.files訪問任何文件數據。如果您只是使用節點,請查看'net'模塊以協助解析http請求。

5

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(); 
相關問題