AWS SDK S3-如何在 putObject 方法中包含凭据
AWS SDK S3- how to include credentials in putObject method
开始使用这种 HTML 形式:
<form action="https://s3.us-east-1.amazonaws.com/BUCKET" method="post" encType="multipart/form-data">
<input type="hidden" name="key" value="${filename}" /><br />
<input type="hidden" name="Content-Type" value="image/jpeg" /><br />
<input type="hidden" name="x-amz-server-side-encryption" value="AES256" />
<input type="hidden" name="X-Amz-Credential" value="MY_CERDENTIALS" />
<input type="hidden" name="X-Amz-Algorithm" value="AWS4-HMAC-SHA256" />
<input type="hidden" name="X-Amz-Date" value="20180817T040045Z" />
<input type="hidden" name="Policy" value='MY_POLICY' />
<input type="hidden" name="X-Amz-Signature" value="MY_SIGN" />
File:
<input type="file" name="file" /> <br />
<input type="submit" name="submit" value="Upload to Amazon S3" />
</form>
我想在 javascript 中使用 ASW SDK 方法 putObject
。我设法创建了这段代码:
AWS.config.update({
endpoint: new AWS.Endpoint('https://s3.amazonaws.com'),
accessKeyId: 'MY_ID', // the app does not run on AWS, so I need credentials
secretAccessKey: 'MY_SECRET_KEY',
s3ForcePathStyle: true,
});
AWS.config.region = "us-east-1";
const params = {
params:{
Bucket: 'ballot-box',
}
}
var bucket = new AWS.S3(params);
const requestParams = {
Key: 'test.png',
ContentType: 'image/jpeg',
Body: file
}
bucket.putObject(requestParams,function(err,file){
if(err)
reject({error: err})
else
resolve({image: encode(file.Body)})
我现在的问题是,我不知道我应该把政策、X-Amz-签名、X-Amz-日期、X--Amz-算法、X-Amz-凭据、x- 放在哪里以及如何放amz-server-side-encryption 和 X-Amz-Date。
编辑:
我的存储桶的 CORS 配置:
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>HEAD</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
从 browser-based upload via POST 移动到 JavaScript SDK 时,您无需提供策略、X-Amz-签名、X-Amz-日期、X--Amz-算法、X -Amz-Credential,或 X-Amz-Date。
如果需要,您可以提供 x-amz-server-side-encryption,您可以通过 ServerSideEncryption 在 requestParams 中执行此操作:"AES256".
开始使用这种 HTML 形式:
<form action="https://s3.us-east-1.amazonaws.com/BUCKET" method="post" encType="multipart/form-data">
<input type="hidden" name="key" value="${filename}" /><br />
<input type="hidden" name="Content-Type" value="image/jpeg" /><br />
<input type="hidden" name="x-amz-server-side-encryption" value="AES256" />
<input type="hidden" name="X-Amz-Credential" value="MY_CERDENTIALS" />
<input type="hidden" name="X-Amz-Algorithm" value="AWS4-HMAC-SHA256" />
<input type="hidden" name="X-Amz-Date" value="20180817T040045Z" />
<input type="hidden" name="Policy" value='MY_POLICY' />
<input type="hidden" name="X-Amz-Signature" value="MY_SIGN" />
File:
<input type="file" name="file" /> <br />
<input type="submit" name="submit" value="Upload to Amazon S3" />
</form>
我想在 javascript 中使用 ASW SDK 方法 putObject
。我设法创建了这段代码:
AWS.config.update({
endpoint: new AWS.Endpoint('https://s3.amazonaws.com'),
accessKeyId: 'MY_ID', // the app does not run on AWS, so I need credentials
secretAccessKey: 'MY_SECRET_KEY',
s3ForcePathStyle: true,
});
AWS.config.region = "us-east-1";
const params = {
params:{
Bucket: 'ballot-box',
}
}
var bucket = new AWS.S3(params);
const requestParams = {
Key: 'test.png',
ContentType: 'image/jpeg',
Body: file
}
bucket.putObject(requestParams,function(err,file){
if(err)
reject({error: err})
else
resolve({image: encode(file.Body)})
我现在的问题是,我不知道我应该把政策、X-Amz-签名、X-Amz-日期、X--Amz-算法、X-Amz-凭据、x- 放在哪里以及如何放amz-server-side-encryption 和 X-Amz-Date。
编辑:
我的存储桶的 CORS 配置:
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>HEAD</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
从 browser-based upload via POST 移动到 JavaScript SDK 时,您无需提供策略、X-Amz-签名、X-Amz-日期、X--Amz-算法、X -Amz-Credential,或 X-Amz-Date。
如果需要,您可以提供 x-amz-server-side-encryption,您可以通过 ServerSideEncryption 在 requestParams 中执行此操作:"AES256".