带分页的 AWS s3 列表对象

Roh*_*hit 3 javascript pagination amazon-s3 amazon-web-services node.js

我想使用 aws s3 实现分页。对象 ms.files 中有 500 个文件,但我想一次只检索 20 个文件,下次再检索 20 个文件,依此类推。

var params = {
  Bucket: 'mystore.in',
  Delimiter: '/',
  Prefix: '/s/ms.files/',
  Marker:'images',
};
s3.listObjects(params, function(err, data) {
  if (err) console.log(err, err.stack); 
  else     console.log(data);          
});
Run Code Online (Sandbox Code Playgroud)

Dav*_*ung 10

在寻找一次列出所有对象时遇到了这个问题,如果您的响应被截断,它会为您提供一个标志isTruncated = true和一个用于下一次调用的 continuationToken

如果你在 es6 上,你可以这样做,

const AWS = require('aws-sdk');
const s3 = new AWS.S3({});

const listAllContents = async ({ Bucket, Prefix }) => {
  // repeatedly calling AWS list objects because it only returns 1000 objects
  let list = [];
  let shouldContinue = true;
  let nextContinuationToken = null;
  while (shouldContinue) {
    let res = await s3
      .listObjectsV2({
        Bucket,
        Prefix,
        ContinuationToken: nextContinuationToken || undefined,
      })
      .promise();
    list = [...list, ...res.Contents];

    if (!res.IsTruncated) {
      shouldContinue = false;
      nextContinuationToken = null;
    } else {
      nextContinuationToken = res.NextContinuationToken;
    }
  }
  return list;
};
Run Code Online (Sandbox Code Playgroud)


Roh*_*hit -1

Jarmod 先生分享的解决方案:

var params = {
  Bucket: 'mystore.in',
  Delimiter: '/',
  Prefix: '/s/ms.files/',
  Marker:'',
  MaxKeys : 20
};
s3.listObjects(params, function(err, data) {
  if (err) console.log(err, err.stack); 
  else     console.log(data);          
});
Run Code Online (Sandbox Code Playgroud)

  • 它没有任何有关分页的信息 (4认同)