如何在nodejs中为桶的每个键生成Url
How to generate Url for each key of a bucket in nodejs
我正在尝试为循环中存储桶的每个键生成 url,即迭代存储桶生成 url 并放入数组中。请建议我最好的方法。
这是我正在尝试的代码..
downloadByBusinessFlowId: function (req, res) {
var AWS = require('aws-sdk');
AWS.config.update({accessKeyId: sails.config.AwsCredential.AWS_ACCESS_KEY_ID, secretAccessKey: sails.config.AwsCredential.AWS_SECRET_ACCESS_KEY});
var s3 = new AWS.S3();
var params = {
Bucket: sails.config.AwsCredential.bucket_name,
Prefix: 'cc_' + req.param('cc')
}
const signedUrlExpireSeconds = 60 * 5;
// console.log(url)
var result = [];
s3.listObjects(params, function (err, data) {
if(err)throw err;
dataLength = data.Contents.length;
var flag = false;
for(var i = 0; i < dataLength; i++){
//need logic here and put url in json
}
console.log(result);
return res.json(result);
});
},
我是这样做的(我已经从 aws-sdk 中承诺了 S3,这段代码来自我的项目,所以你可能需要稍微更改一下代码):
return Bluebird.try(function () {
const params = {
Bucket: <BUKCET>, /* required */
// ContinuationToken: '',
Prefix: <PREFIX>, //optional
StartAfter: <STARTAFTER> //optional
};
// Prefix is for filtering your objects if say you store objects like userID/message1 so prefix can be userID
// List all objects, for Keys for which we will create URLs
return AWS.S3.listObjectsV2Async(params);
}).then(function (data) {
console.log("ALL OBJECTS FOR REQUEST: ", data.Contents);
const createSignedUrlPromises = [];
const response = [];
const message_ids = [];
// For each object, create a promise for making signed url
_.forEach(data.Contents, function (content) {
const params = {
Bucket: <BUCKET>,
Key: content.Key,
Expires: <EXPIRY>
};
createSignedUrlPromises.push(AWS.S3.getSignedUrlAsync('getObject', params));
});
return Bluebird.all(createSignedUrlPromises).then(function (data) {
console.log("URLS FOR VOICE MESSAGES: ", data);
// data is an array of signed urls for all objects in your bucket
});
});
我正在尝试为循环中存储桶的每个键生成 url,即迭代存储桶生成 url 并放入数组中。请建议我最好的方法。
这是我正在尝试的代码..
downloadByBusinessFlowId: function (req, res) {
var AWS = require('aws-sdk');
AWS.config.update({accessKeyId: sails.config.AwsCredential.AWS_ACCESS_KEY_ID, secretAccessKey: sails.config.AwsCredential.AWS_SECRET_ACCESS_KEY});
var s3 = new AWS.S3();
var params = {
Bucket: sails.config.AwsCredential.bucket_name,
Prefix: 'cc_' + req.param('cc')
}
const signedUrlExpireSeconds = 60 * 5;
// console.log(url)
var result = [];
s3.listObjects(params, function (err, data) {
if(err)throw err;
dataLength = data.Contents.length;
var flag = false;
for(var i = 0; i < dataLength; i++){
//need logic here and put url in json
}
console.log(result);
return res.json(result);
});
},
我是这样做的(我已经从 aws-sdk 中承诺了 S3,这段代码来自我的项目,所以你可能需要稍微更改一下代码):
return Bluebird.try(function () {
const params = {
Bucket: <BUKCET>, /* required */
// ContinuationToken: '',
Prefix: <PREFIX>, //optional
StartAfter: <STARTAFTER> //optional
};
// Prefix is for filtering your objects if say you store objects like userID/message1 so prefix can be userID
// List all objects, for Keys for which we will create URLs
return AWS.S3.listObjectsV2Async(params);
}).then(function (data) {
console.log("ALL OBJECTS FOR REQUEST: ", data.Contents);
const createSignedUrlPromises = [];
const response = [];
const message_ids = [];
// For each object, create a promise for making signed url
_.forEach(data.Contents, function (content) {
const params = {
Bucket: <BUCKET>,
Key: content.Key,
Expires: <EXPIRY>
};
createSignedUrlPromises.push(AWS.S3.getSignedUrlAsync('getObject', params));
});
return Bluebird.all(createSignedUrlPromises).then(function (data) {
console.log("URLS FOR VOICE MESSAGES: ", data);
// data is an array of signed urls for all objects in your bucket
});
});