我有一个javascript代码,它获取s3存储桶的xml列表http://BUCKETNAME.s3.REGION.amazonaws.com/
并将其用作播放列表:
AWS.config=
{ "accessKeyId": "ACCESS KEY",
"secretAccessKey": "SECRET KEY",
"region": "REGION" };
// Create S3 service object
s3 = new AWS.S3();
var params = {
Bucket: 'BUCKET NAME', /* required */
Delimiter: '',
EncodingType: 'url',
Marker: '',
MaxKeys: 0,
Prefix: '',
RequestPayer: 'requester'
};
s3.listObjects(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else
{
console.log('the list is approved '); // successful response
// Here is the function that convert the file list in the xml to an array
var b = document.documentElement;
b.setAttribute('data-useragent', navigator.userAgent);
b.setAttribute('data-platform', navigator.platform);
var radioName;
var radioTitle;
var tracklength= 0;
// setupPlayer function
function setupPlayer(href,name){
radioName= href;
radioTitle= name;
$.ajax({
type: "GET",
url: "http://BUCKETNAME.s3.REGION.amazonaws.com/?prefix=radio/"+radioName+"/",
dataType: "xml",
success: function(xml){
//tracklength=0;
tracks =[];
$(xml).find('Contents').each(function(){
tracklength=tracklength+1;
tracks.push({
"track": tracklength,
"file" : $(this).find('Key').text()
});
});
radio(tracks);
},
error: function() {
alert("An error occurred while processing XML file.");
}
});
}
}
正如您所看到的,在此代码中,我将获取XML文件并添加一个广播名称(即文件夹名称),之后ajax会将此文件夹中的所有文件名保存到数组{{1} }。
如果有Everyone的列表被授予者权限,则此代码可以正常运行。所以这里不需要aws配置。我可以在tracks
函数中的else
语句中运行代码,它会给我相同的响应。
我想要的是仅授予对此密钥的授权访问权限,以使此功能在没有访问密钥和密钥的情况下不起作用。
因此除了拥有访问密钥和密钥的人之外,没有人可以访问xml列表。
这可能吗?
(这不是完整的代码,但你有了想法,访问存储桶的XML文件并获取密钥将它们保存到数组中。)
答案 0 :(得分:0)
您应该使用s3.getObject(http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#getObject-property)来获取xml文件而不是$ .ajax调用。