2017-03-23 7 views
0

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

私は次のことを試してみました:

  1. 削除の体-パーサ 'と 'multer' を使用それだけでは悪い結果になります(req.bodyとreq.fileはどちらも未定義です)。ボディパーサーを使用すると、少なくとも私はreq.bodyが動作していることを保証することができます
  2. 原因を単純化するために、クライアント側からテキストフィールド入力をすべて削除し、ファイルアップロードオプションのみを残して、 req.fileにはundefinedが返されます(multerはまったく動作していません)
  3. また、「req.bodyがまだ完全に設定されていない可能性があります。クライアントがフィールドとファイルを送信する順序によって異なりますサーバーに送信します。私の場合、私はファイルを取得していないので、今は私にとって重要ではありません。
  4. multer-s3を使用しないでmulterを使用し、upload.singleの代わりにupload.arrayを試してみましたが、まだ運がありません(multer-s3はmulterの上に構築されていますので、問題が、ちょうどそれを試してみることにし)
  5. スキップAWS S3とローカルパスに保管し、まだ未定義の結果
+0

ここには提案がないようです。私は自分のコードを「バスボーイ」に切り替える必要があると思って、それを動作させることを望みます。私の唯一の恐怖は、 '混乱者'が「バスボイ」の上に建てられていることを考えると、同じ問題が発生するということです。多くの人がこの問題に遭遇しているのを見ることができます。しかし、私は誰も私の状況に遭遇していないと思う。 – RogerMW

答えて

0

multerとbusboyと何も作品を切り替える長い闘いの後。突然、私のフォームが実際にPolymer要素 'is = "iron-form"'を使っていることに気がつきました。私の間違いは、以下のように私の元の投稿にそれを入力しませんでした。それを削除した後、私のファイルのアップロードはmulter上で動作しています - 私はそれもバスボーで動作すると確信しています。

<form is="iron-form" method="post" enctype="multipart/form-data" action="/create"> 

ポリマー要素は、私に過去に問題を常に引き起こします。しかし、間違ってはいけない、それはあなたのページをデザインするために利用できる多くの偉大なものがある素晴らしいプロジェクトです。しかし、それらの要素をいかに活用してそれらを活用するかを本当に理解する必要があります。私の場合、私はレッスンから学び、あなたと共有することを望みます。

関連する問題