9

私のアプリでは、私はこれに似たものを使用して、S3にクライアントから直接写真を送信していHerokuの勧告を提案:https://devcenter.heroku.com/articles/s3-upload-nodeクライアントからサーバーにbase64イメージを転送する方法、またはs3バケットからbinary/base64をダウンロードする方法はありますか?

主な利点は、チャンクが上がらないので、(i」が仮定しているサーバーのコストを節約することですtはmultipart-y形式のデータなどを使用してサーバーに送信されます)。

はしかし、私はこの要件を述べており、またTwitterにこれらのイメージを共有できるようにしたい:

POSTがmultipart/form-data要求であることを確認してください。ファイルの生のバイナリ(メディアパラメータ)またはbase64でエンコードされたコンテンツ(media_dataパラメータ)をアップロードします。 I - 可能な場合は

のサイズより大きなファイルにbase64エンコード結果ので、私はS3サーバに戻ってアップロードし、クライアント側に必要なBASE64を送信しようとしたが、写真のサイズに依存してきた、生のバイナリを使用します多くの場合、返信するには大きすぎるというエラーが表示されます。

TLDR

私は自分のサーバーにmulitparty /マルチパートフォームデータを使用して、私の写真を送信する必要がありますので、私はツイッターに写真を共有するために必要なBASE64 /バイナリを持つことができ、または私が送信し続けることができます私のクライアントからs3への写真?

その後、何とか、効率的は、サーバー上の必要にbase64 /バイナリを(おそらく要求モジュールを使用して)得るので、私はそれからTwitterに画像を送ることができますか?

答えて

2

クライアントコードを変更せずにこれを行う簡単な方法の1つは、S3 eventsです。 S3イベントはAWSのラムダ機能を起動して、画像をTwitterに投稿することができます。 lambda関数内の任意のライブラリを使用して、twitterへの効率的な投稿を行うことができます。あなたがラムダを使用したい場合、またはHerokuに固執するかどうかはわかりません。

0

クライアントから文書を直接アップロードしてs3にアップロードする場合は、クライアントにAWS秘密/秘密鍵を公開しています。より安全な方法は、画像をノードとノードにアップロードして、それをS3にアップロードすることです。イメージをノードサーバーにアップロードするには、 multipart/form-dataを使用し、Multerミドルウェアを使用することをお勧めします。

アップロード方法に関係なく、次のコードを使用して画像をTwitterに配信できます。このコードでは、AWS-SDKモジュールを使用しています。

var s3 = new AWS.S3(); 
    var filename = req.query.filename; 
    var params = { 
     Bucket: <bucketname>, 
     Key: <image path> 
    }; 

    var extension = filename.split('.')[1]; 
    if (extension == "jpg" || extension == "JPG" || extension == "jpeg" || extension == "JPEG") 
    { 
     res.setHeader('Content-Type', 'image'); 
    } 
    else if (extension == "png" || extension == "PNG") 
    { 
     res.setHeader('Content-Type', 'image/png'); 
    } 

    s3.getObject(params).createReadStream().pipe(res); 

この方法は他のExpressアプリケーションと同じように簡単に拡張できます。

+0

エンドユーザーがS3に直接アップロードできるようにAWS認証情報を公開する必要はありません。 「サイン付きURLを使用したオブジェクトのアップロード」を参照してください。 – chris

+0

はい、私の資格情報はサーバー上で保護されています。 – NoobSter

関連する問題