5

node.js アプリから、他の場所で実行されている Web サーバーにファイルをプッシュする必要があります。Web サーバーは、通常のアップロード メカニズムを介してファイルを受け入れます。たとえば、受信サーバーに次のようなフォームのページがあるとします。

<form enctype="multipart/form-data" action="upload.php" method="POST">
 file: <input name="uploaded" type="file" /><br />
 name: <input type="text" name="filename" /><br />
 <input type="submit" value="upload" />
 </form>

ユーザーがファイルを選択し、テキスト入力フィールドにファイル名を指定すると、そのファイルは upload.php (私は制御しません) を介してサーバーにアップロードされ、指定された名前で保存されます。(フォームには他の項目があるかもしれませんが、簡単にするためにそれらだけを示しています)。php スクリプトは、"ok" または "error ..." (エラーを含む) という単純なテキスト応答で応答します。

ここで、node.js からその php スクリプトにプログラムでファイルを送信できるようにしたいと考えています。ファイル (node.js 側) は、ファイルシステムに存在する場合と存在しない場合があります。または、別の場所から入ってきたものである可能性もあります。たとえば、URL から取得したり、ユーザーによってアップロードされたりする可能性があります。等

これらの行に沿っていくつかのものを見てきましたが、パラメーター (ファイル名など) を処理する方法がわかりません。また、オプション オブジェクトに何を指定すればよいかもわかりません。また、この例では、それがファイル システム ファイルからのものであることを前提としていますが、私が言うように、そうでない場合もあります。

fs.createReadStream(filename).pipe(http.request(options, function(response) {
}));
4

1 に答える 1

0

モジュール「ポスター」を使用するだけで簡単になりました。これは、call to poster の薄いラッパーです。「fileId」はファイルを表すフォーム要素の名前で、他のパラメータは単に「フィールド」オブジェクトに入れられます。

var _poster = require('poster');

var uploadFileToRemoteServer = function (remoteScript, filename, fileId, fields, cb) {
    _poster.post(
      filename,
      {
        uploadUrl: remoteScript,
        method: "POST",
        fileId: fileId,
        fields: fields || {}
      },
      function (err, r) {
        if (err) {
        } else {
          if(cb)
            cb(r);
        }
      });
  }
于 2013-05-06T18:14:40.657 に答える