Amazon S3 バケットにファイルをアップロードしようとしています。S3 と amazon がセットアップされます。これは、Amazon からのエラー メッセージです。
競合するクエリ文字列パラメーター: acl、policy
Node.js用のCrypto.jsを使用して、ポリシーと署名がエンコードされます
var crypto=Npm.require("crypto");
Meteor HTTP.post メソッドで POST リクエストを構築しようとしています。これも間違っている可能性があります。
var BucketName="mybucket";
var AWSAccessKeyId="MY_ACCES_KEY";
var AWSSecretKey="MY_SECRET_KEY";
//create policy
var POLICY_JSON={
"expiration": "2009-01-01T00:00:00Z",
"conditions": [
{"bucket": BucketName},
["starts-with", "$key", "uploads/"],
{"acl": 'public-read'},
["starts-with", "$Content-Type", ""],
["content-length-range", 0, 1048576],
]
}
var policyBase64=encodePolicy(POLICY_JSON);
//create signature
var SIGNATURE = encodeSignature(policyBase64,AWSSecretKey);
console.log('signature: ', SIGNATURE);
これは、Meteor で使用している POST リクエストです。
//Send data----------
var options={
"params":{
"key":file.name,
'AWSAccessKeyId':AWSAccessKeyId,
'acl':'public-read',
'policy':policyBase64,
'signature':SIGNATURE,
'Content-Type':file.type,
'file':file,
"enctype":"multipart/form-data",
}
}
HTTP.call('POST','https://'+BucketName+'.s3.amazonaws.com/',options,function(error,result){
if(error){
console.log("and HTTP ERROR:",error);
}else{
console.log("result:",result);
}
});
そして彼女は私がポリシーと署名をエンコードしています:
encodePolicy=function(jsonPolicy){
// stringify the policy, store it in a NodeJS Buffer object
var buffer=new Buffer(JSON.stringify(jsonPolicy));
// convert it to base64
var policy=buffer.toString("base64");
// replace "/" and "+" so that it is URL-safe.
return policy.replace(/\//g,"_").replace(/\+/g,"-");
}
encodeSignature=function(policy,secret){
var hmac=crypto.createHmac("sha256",secret);
hmac.update(policy);
return hmac.digest("hex");
}
Aは何が起こっているのか理解できません。私はこれらのメソッドをよく知らないので、POST メソッドまたは暗号化に既に問題がある可能性があります。誰かが私を正しい方向に向けたり、エンコードしたり、POST リクエストを AmazonS3 に適切に送信したりすることができれば、大いに役立ちます。
(クライアントに強制的にサインアップさせたくないので、filepicker.ioを使用するのは好きではありません。)
前もって感謝します!!!