0

ブラウザーから直接、プライベート s3 バケットにアップロードすることに関する Heroku の記事を見つけました。

https://devcenter.heroku.com/articles/s3-upload-node

私にとって、aws-sdk パッケージは役に立ったというより邪魔になりました。疑わしい s3upload スクリプトは、もう 1 つの懸念事項でした。

面倒なことをせずにs3に直接アップロードするにはどうすればよいですか?

4

2 に答える 2

1

これを理解するために、古い Java ベースのプロジェクトを掘り下げる必要がありました。本質に取り掛かると、それは素晴らしくシンプルであることがわかります. まず、アップロードを行うための簡単な HTML フォームをセットアップします。

<form action="https://BUCKETNAME.s3.amazonaws.com/"
      method="post"
      enctype="multipart/form-data">
  <input type="hidden" name="key" value="KEY"></input>
  <input type="hidden" name="AWSAccessKeyId" value="ACCESS_KEY"></input>
  <input type="hidden" name="policy" value="POLICY"></input>
  <input type="hidden" name="signature" value="SIGNATURE"></input>
  <input type='file' name='file'>
  <input type='submit' value='Upload Driver Photo'>
</form>

次に、簡単な Node.JS スクリプトを作成して、上記の値、POLICYおよび以下の変数の値を生成します。どちらの値も base64 でエンコードする必要があることに注意してください。SIGNATUREencodedPolicysignature

var crypto=require("crypto"),
  bucketName="BUCKETNAME",
  secretKey="SECRET_KEY",
  s3Key="KEY",
  expiration= new Date();
expiration.setDate(expiration.getDate()+1);
var policy={
  expiration:expiration.toISOString(),
  conditions:[
    {bucket:bucketName},
    {key:s3Key}
  ]
},
  encodedPolicy=new Buffer(JSON.stringify(policy)).toString("base64"),
  signature=crypto.createHmac(
    "sha1", secretKey
  ).update(encodedPolicy).digest("base64");

上記の Node.JS コードを Promise でラップすると、さらに美味しくなります。Angular/REST、テンプレートを使用した Express、または選択したその他のミドルウェア/プレゼンテーション フレームワークに埋め込みます。

注: 上記のコードは、アップロード ファイルのサイズを制限しません。これは別の条件、つまり 50MB の制限で行われます["content-length-range", 0, 52428800]

于 2014-12-02T06:07:44.460 に答える
1

に示すように、minio-jsを使用してこれを行うことができます

サーバーで、次のような PUT の署名付き URL を取得します。

var presignedUrl = s3Client.presignedPutObject('my-bucketname', 'my-objectname', 1000, function(e, presignedUrl) {
  if (e) return console.log(e)
  console.log(presignedUrl)
})

ブラウザでこれpresignedUrlを使用して、S3 への単純な PUT リクエストを作成し、オブジェクトをアップロードします。

于 2016-01-23T07:08:06.960 に答える