0

expressでnodeJを使用する。

POSTデータはボディパーサーによって解析されています。次に、受信した画像ファイルを、imagesという名前のエクスプレスアプリケーションのフォルダに保存します。画像はnodeJsアプリに投稿されています。コールバック関数のres.body変数を見ると、画像が含まれていますが、保存方法がわかりません。

スタックフローを調べましたが、答えが見つかりませんでした。だから自分を投稿しました。

fsライブラリとそのfs.writeFile()関数を使用してみました。ファイルは保存されますが、すべて破損しています。

image1は、投稿されたデータの画像の名前です。bodyparser()の使用

var image = req.body.image1;
        fs.writeFile('images/newImage.jpg', image, function(err){
            if (err) throw err;
            console.log('It is saved');
        });

これにより、ファイルが画像ディレクトリに保存されますが、画像ではありません。

私はcurlを使用してnodejsアプリケーションにデータを投稿しています。コードは

$curl = curl_init();
$data = array('name' => 'First','file' => "image1=@".__dir__."/images/1.jpg");

curl_setopt($curl, CURLOPT_URL, "http://localhost:3000/api/");
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

curl_exec($curl);
curl_close($curl);

2つのconsole.log関数の両方をログに記録しています

   console.log(req.files);
   console.log(req.body);

とログは与える

{}
{ name: 'First',
  file: 'image1=@C:\\xampp\\htdocs\\curltest/images/1.jpg' }

これが私を夢中にさせているのを助けてください:-/

4

2 に答える 2

2

まず、正しいパラメータの順序fs.writeFileは、最初にファイル名、次にコンテンツです。

使用しているexpress.bodyParser()場合は、アップロードされたファイルがreq.filesフィールドに表示されます。

そしてもちろん、コールバックを書く必要があります:

fs.writeFile('newImage', req.files.image, function (err) {
  if (err) throw err;
  console.log("It's saved");
});

アップデート

フォームのエンコーディングはである必要があるため、HTML側も確認する必要がありますmultipart/form-data

例:

<form action="/somewhere/to/post" method="post" enctype="multipart/form-data">
  <input type="file" name="image1"/>
  <input type="submit"/>
</form>
于 2012-07-28T12:34:12.593 に答える
0

Express 4を使用している場合、bodyParserは含まれていませんが、本当に必要なのはマルチパーティパッケージを使用することです。これを使用すると、コードは次のようになります。

POSTルーター内

var form = new multiparty.Form();

form.parse(req, function(err, fields, files) {
        if(err){
            res.status(500).send('not file');
        }
     res.send(util.inspect({fields: fields, files: files}));
});

お役に立てれば

于 2014-09-15T11:50:02.633 に答える