Roh*_*hit 41 javascript amazon-s3 amazon-web-services node.js
我正在使用node.js使用aws-sdk.我想列出指定文件夹中的图像,例如
我想列出此位置的所有文件和文件夹,但不列出文件夹(图像)内容.在aws-sdk中有列表对象功能,但它也列出了所有嵌套文件.
这是代码:
var AWS = require('aws-sdk');
AWS.config.update({accessKeyId: 'mykey', secretAccessKey: 'mysecret', region: 'myregion'});
var s3 = new AWS.S3();
var params = {
Bucket: 'mystore.in',
Delimiter: '',
Prefix: 's/5469b2f5b4292d22522e84e0/ms.files'
}
s3.listObjects(params, function (err, data) {
if(err)throw err;
console.log(data);
});
Run Code Online (Sandbox Code Playgroud)
Roh*_*hit 34
现在使用此代码正常工作:
var AWS = require('aws-sdk');
AWS.config.update({accessKeyId: 'mykey', secretAccessKey: 'mysecret', region: 'myregion'});
var s3 = new AWS.S3();
var params = {
Bucket: 'mystore.in',
Delimiter: '/',
Prefix: 's/5469b2f5b4292d22522e84e0/ms.files/'
}
s3.listObjects(params, function (err, data) {
if(err)throw err;
console.log(data);
});
Run Code Online (Sandbox Code Playgroud)
Mic*_*bot 26
文件夹是虚幻的,但S3 确实提供了一种模仿它们存在的机制.
如果设置Delimiter为/则每个响应层也将返回CommonPrefixes下一层"文件夹" 的数组,您将附加到此请求的前缀,以检索下一层.
如果您Prefix是"文件夹",请附加一个斜杠.否则,您将发出不必要的请求,因为第一个请求将返回一个公共前缀.例如,文件夹"foo"将返回一个公共前缀"foo /".
Vas*_*iak 15
我提出了一个小模块,列出了你给它的"文件夹"的内容:
s3ls({bucket: 'my-bucket-name'}).ls('/', console.log);
Run Code Online (Sandbox Code Playgroud)
将打印这样的东西:
{ files: [ 'funny-cat-gifs-001.gif' ],
folders: [ 'folder/', 'folder2/' ] }
Run Code Online (Sandbox Code Playgroud)
然后
s3ls({bucket: 'my-bucket-name'}).ls('/folder', console.log);
Run Code Online (Sandbox Code Playgroud)
将打印
{ files: [ 'folder/cv.docx' ],
folders: [ 'folder/sub-folder/' ] }
Run Code Online (Sandbox Code Playgroud)
这是s3ls.js:
var _ = require('lodash');
var S3 = require('aws-sdk').S3;
module.exports = function (options) {
var bucket = options.bucket;
var s3 = new S3({apiVersion: '2006-03-01'});
return {
ls: function ls(path, callback) {
var prefix = _.trimStart(_.trimEnd(path, '/') + '/', '/');
var result = { files: [], folders: [] };
function s3ListCallback(error, data) {
if (error) return callback(error);
result.files = result.files.concat(_.map(data.Contents, 'Key'));
result.folders = result.folders.concat(_.map(data.CommonPrefixes, 'Prefix'));
if (data.IsTruncated) {
s3.listObjectsV2({
Bucket: bucket,
MaxKeys: 2147483647, // Maximum allowed by S3 API
Delimiter: '/',
Prefix: prefix,
ContinuationToken: data.NextContinuationToken
}, s3ListCallback)
} else {
callback(null, result);
}
}
s3.listObjectsV2({
Bucket: bucket,
MaxKeys: 2147483647, // Maximum allowed by S3 API
Delimiter: '/',
Prefix: prefix,
StartAfter: prefix // removes the folder name from the file listing
}, s3ListCallback)
}
};
};
Run Code Online (Sandbox Code Playgroud)
您可以使用Prefixin s3 API 参数。我正在添加一个我在项目中使用的示例:
listBucketContent: ({ Bucket, Folder }) => new Promise((resolve, reject) => {
const params = { Bucket, Prefix: `${Folder}/` };
s3.listObjects(params, (err, objects) => {
if (err) {
reject(ERROR({ message: 'Error finding the bucket content', error: err }));
} else {
resolve(SUCCESS_DATA(objects));
}
});
})
Run Code Online (Sandbox Code Playgroud)
这Bucket是包含文件夹的存储桶Folder的名称,也是您要在其中列出文件的文件夹的名称。
| 归档时间: |
|
| 查看次数: |
42702 次 |
| 最近记录: |