Si mund të gjeneroj URL të para-nënshkruara S3 për ngarkim në bazë të kërkesës nga NodeJS? Po ruaj emrin e kovës, rajonin, çelësin e përdoruesit IAM dhe sekretin e përdoruesit IAM për kova të shumta. Fatkeqësisht, të gjithë shembujt që po gjej tregojnë se konfigurimi AWS po përditësohet globalisht:
Të gjithë shembujt që po gjej tregojnë rreshtat e mëposhtëm config.*
që më trembin:
var AWS = require('aws-sdk');
AWS.config.update({accessKeyId: AWS_ACCESS_KEY, secretAccessKey: AWS_SECRET_KEY});
AWS.config.region = 'eu-west-1';
Ky kod duket se vendos konfigurimin globalisht... gjë që do të shkatërronte çdo kërkesë OSE të mëvonshme që mund të ndodhë njëkohësisht.
Do të doja të ngarkoja çdo gjë në mënyrë dinamike, nga kredencialet e ruajtura të IAM dhe emri i kovës, dhe të gjeneroj URL-në duke përdorur informacionin e ruajtur:
var aws = require('aws-sdk'),
express = require('express'),
Repo = require('../../models');
function createUrl (req, res, next) {
var endpointId = (req.params.endpointId || '').toUpperCase(),
fileType = req.body.type || '',
fileName = req.body.name || '',
fileSize = req.body.size || '';
Repo.Endpoints.findById(endpointId, function (err, item) {
if (err) { return next(err); }
if (!item) { return next(new Error('Unknown endpoint')); }
var config = {
accessKeyId : item.iamUserAccessKey,
secretAccessKey : item.iamUserSecret,
region : item.bucketRegion
};
var params = {
Bucket : item.bucketName,
Key : fileName,
ContentType : fileType
};
var s3 = new aws.S3(config);
s3.getSignedUrl('putObject', params, function(err, url) {
if(err) console.log(err);
res.send({ url: url });
});
});
}
Megjithatë, ky kod thjesht duket i gabuar... sikur po më mungon diçka kritike.
Përditësim 13/10/2015 19:33 EST
URL-ja është krijuar megjithatë, po marr një gabim kur përpiqem të bëj një POST:
XMLHttpRequest cannot load https://<%URL FROM SERVER%>. No 'Access-Control
-Allow-Origin' header is present on the requested resource. Origin 'http:
//localhost:4003' is therefore not allowed access. The response had HTTP
status code 403.
Politika CORS në kovë është:
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>Authorization</AllowedHeader>
</CORSRule>
<CORSRule>
<AllowedOrigin>http://localhost:4003</AllowedOrigin>
<AllowedOrigin>http://lvh.me:4003</AllowedOrigin>
<AllowedMethod>PUT</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<ExposeHeader>x-amz-server-side-encryption</ExposeHeader>
<ExposeHeader>x-amz-request-id</ExposeHeader>
<ExposeHeader>x-amz-id-2</ExposeHeader>
<AllowedHeader>Authorization</AllowedHeader>
<AllowedHeader>Origin</AllowedHeader>
</CORSRule>
</CORSConfiguration>