4

nodeJS と Java Script は初めてです。Web クライアントから送信された nodeJS サーバーでファイルを読み取るメカニズムを実装する必要があります。

誰かがそれを行う方法を教えてもらえますか? readFileSync()ファイルの内容を読み取ることができるnodeJSファイルシステムで見つけました。しかし、Web ブラウザーから送信された要求からファイルを取得するにはどうすればよいでしょうか。また、ファイルが非常に大きい場合、nodeJS でそのファイルの内容を読み取る最良の方法は何ですか?

4

2 に答える 2

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);

これは明らかに非常に単純な例ですが、formidable は大きなファイルを扱う場合にも優れています。これにより、解析されたフォーム データの読み取りストリームにアクセスできるようになります。これにより、アップロード中のデータを操作したり、別のストリームに直接パイプしたりできます。

// 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();
于 2012-11-29T06:16:31.167 に答える
2

HTML ファイル入力からのファイルを含むことができる http 要求の本文を解析する必要があります。たとえば、ノードで高速 Web フレームワークを使用する場合、HTML フォームを介して POST 要求を送信し、req.body.files を介して任意のファイル データにアクセスできます。ノードのみを使用している場合は、「net」モジュールを見て、http リクエストの解析を支援してください。

于 2012-11-29T05:43:43.297 に答える