2016-12-05 7 views
0

クライアントからサーバーに画像をアップロードしてから、S3 AWSバケットにアップロードしようとしています。これは、ローカルサーバーでは有効ですが、ライブサーバーでは機能しません。4mbの画像ファイルをアップロードすると、プロダクションサーバーにアップロードするときにHTTP 413エラーが発生する

XMLHttpRequest cannot load https://api.parthenon-click.com/img_upload/cover. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://www.parthenon-click.com' is therefore not allowed access. The response had HTTP status code 413. 

私はクライアントサーバー用にElasticBeanstalk PHP v5.4を、バックエンド用にExpress v4サーバーを搭載したノードv7.0を使用しています。クライアント側は単純なhtml/css/jQueryです。私は、ユーザーのライブラリから写真を取得し、使用してバックエンドにそれを渡します。これは、動作していれば、ファイルが1MB未満であると、画像を保存し

$.ajax({ 
     url: api_url, 
     type: 'POST', 
     data: form, 
     processData: false, 
     contentType: false, 
     success: function(data){ 
      console.log('upload successful!'); 
     }, 
     error: function(err){ 
      console.log(err); 
     } 
}); 

。私はまだ504のHTTPエラーが発生します。これは、ローカルサーバーを実行している限り、ファイルのサイズに関係なく機能します。

は、だから私はhtaccessbody-parserを増額しようとした、とmulter制限:

ボディパーサー:

app.use(bodyParser.json({limit: '50mb'})); 
app.use(bodyParser.urlencoded({ limit: '50mb', extended: true, parameterLimit:50000 })); 
app.use(bodyParser.raw({ limit: '10mb'})); 

Multer:

var upload = multer({ 
    storage: storage, 
    limits: { 
     fileSize: 10000000 
    } 
}) 

.htaccessファイル:

php_value upload_max_filesize 30M 

私のヘッダーファイルは、他のすべてのタイプのAPI要求に対してうまくいきます。

router.use(function(req, res, next) { 
    // do logging 
     //set CORS policy to 'allow' 
    res.setHeader("Access-Control-Allow-Methods", "POST, PUT, OPTIONS, DELETE, GET"); 
    res.header("Access-Control-Allow-Origin", "*"); 
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); 

    next(); 
}); 

最後に、すべてのドメインバージョンでSSLを有効にしました。

これは問題を解決していません。私はここで何が欠けていますか?

+0

ノードとPHPの前にApacheまたはNginxを使用していますか? – CreasolDev

+0

@CreasolDev Nginx –

+0

その場合、私はおそらく、あなたの答えを持ってきました。 – CreasolDev

答えて

0

ノードの前にNginxのようなWebサーバーを使用すると、すべての要求はNginxを経由し、Node.jsに到達する前でもnginxによって検証されます。

Nginxには、デフォルトで設定ファイルが/etc/nginx/nginx.confにあります。このファイルには、すべての要求に対して多くのデフォルトプロパティがあり、そのうちの1つはclient_max_body_sizeです。そのプロパティのデフォルト値は、1MBファイルのように1mです。

もご.htaccessファイルが何もしなかった理由である(あなたがそれをする場合を除き、それ自体が、.htaccessを使って何をしたことがないのNode.js)

手動で別の番号に変更し、そのことができます」 nginx(nginxをリロードした後)の新しい最大ボディサイズにすることができますが、 "フル"コントロールが必要で、アプリケーションがボディサイズをチェックするようにするには、0に設定して、クライアントリクエストボディサイズのチェックを無効にします。
Setting size to 0 disables checking of client request body size.

このプロパティを変更すると、PHPリクエストの最大アップロードサイズも変更されます。

+0

ありがとうCreasol。私はこの問題を取り返そうとするのは数日前です。しかし、これは私の行くことになります。 –

+0

よろしく!それがうまくいけば私に知らせてください、私は私の答えの左側に緑色のチェックマークを気にしない;)また、私は(少なくとも私は思う)私の自分のプロジェクトでまったく同じ問題を抱えている同じように頭を下げる。 – CreasolDev

+1

それはうまくいった。どのようなウサギの穴。これを必要とする次の人のために、これはあなたのインスタンスの設定ファイルを設定する方法です... http://stackoverflow.com/questions/18908426/increasing-client-max-body-size-in-nginx-conf- on-aws-elastic-beanstalk/18951706#18951706 –

関連する問題