multer-s3のサポートを使用してクライアント側からAWS S3ストレージサーバに画像ファイルをアップロードしようとしました。しかし、私はreq.file呼び出しで未定義の結果を得ています。私はグーグルで、私の問題や可能性のある原因をすべて調べています。誰かが私をここで助けることを願っています。前もって感謝します。req.fileはノードエクスプレスアプリケーションでmulterを使用して常に定義されていません
クライアント側のHTMLコード:
<form method="post" enctype="multipart/form-data" action="/create">
<input type="text" name="name" />
<input type="text" name="topic" />
<input type="file" name="image" />
<input type="submit" value="Upload" />
</form>
サーバー側のコード:
var express = require('express');
var http = require('http');
var app = express();
var methodOverride = require('method-override');
var bodyParser = require('body-parser');
var multer = require('multer');
var multerS3 = require('multer-s3');
var AWS = require('aws-sdk');
app.use(methodOverride());
app.use(bodyParser.urlencoded({ extended: true }));
//Create S3 client
var s3 = new AWS.S3();
//this code is copy directly from multer-s3 since I don't care about my file name shown on S3 for now
var upload = multer({
storage: multerS3({
s3: s3,
bucket: mybuckname,
metadata: function (req, file, cb) {
cb(null, {fieldName: file.fieldname});
},
key: function (req, file, cb) {
cb(null, Date.now().toString())
}
})
});
app.post('/create', upload.single('image'), function(req, res) {
var nameField = req.body.name,
topicField = req.body.topic;
console.log("File: ", req.file);
console.log("Name: ", nameField);
console.log("Topic: ", topicField);
res.sendStatus(200);
res.end();
});
私は次のことを試してみました:
- 削除の体-パーサ 'と 'multer' を使用それだけでは悪い結果になります(req.bodyとreq.fileはどちらも未定義です)。ボディパーサーを使用すると、少なくとも私はreq.bodyが動作していることを保証することができます
- 原因を単純化するために、クライアント側からテキストフィールド入力をすべて削除し、ファイルアップロードオプションのみを残して、 req.fileにはundefinedが返されます(multerはまったく動作していません)
- また、「req.bodyがまだ完全に設定されていない可能性があります。クライアントがフィールドとファイルを送信する順序によって異なりますサーバーに送信します。私の場合、私はファイルを取得していないので、今は私にとって重要ではありません。
- multer-s3を使用しないでmulterを使用し、upload.singleの代わりにupload.arrayを試してみましたが、まだ運がありません(multer-s3はmulterの上に構築されていますので、問題が、ちょうどそれを試してみることにし)
- スキップAWS S3とローカルパスに保管し、まだ未定義の結果
ここには提案がないようです。私は自分のコードを「バスボーイ」に切り替える必要があると思って、それを動作させることを望みます。私の唯一の恐怖は、 '混乱者'が「バスボイ」の上に建てられていることを考えると、同じ問題が発生するということです。多くの人がこの問題に遭遇しているのを見ることができます。しかし、私は誰も私の状況に遭遇していないと思う。 – RogerMW