aws-sdk S3:在 Reactjs 中使用 listObjectsV2 列出所有键
aws-sdk S3: list all keys with listObjectsV2 in Reactjs
我正在尝试创建特定存储桶中所有文件的列表并将其呈现在 UI 上,我能够将信息记录到控制台,该控制台目前是 8 个数组对象,“Key”是每个文件的名称 属性,如下所示:
我遇到的问题是,当我尝试将这些“关键”属性设置为我的状态以便能够映射并在列表中显示它们时,我最终得到了数据 运行在控制台中连续循环,我不确定为什么。这是我目前在我的文件中的内容:
如果我尝试将“setListFiles”设置为控制台日志下方的“内容”,这就是连续循环开始发生的地方。如果我做错了一些简单的事情,请原谅我,因为这对我来说仍然是新的,但我真的很感激任何指导,在此先感谢!
我提到的无限循环是由于没有在 useEffect 中调用 s3.listObjects,所以调用了“setListFiles”,重新渲染组件并再次调用 s3.listObjects 循环然后重复因此我得到了无限循环。我对这个文件的最终代码是这样的:
import { useState, useEffect } from 'react';
import AWS from 'aws-sdk';
AWS.config.update({
accessKeyId: process.env.REACT_APP_ACCESS_ID,
secretAccessKey: process.env.REACT_APP_ACCESS_KEY,
region: process.env.REACT_APP_REGION,
});
const s3 = new AWS.S3();
const params = {
Bucket: 'elixivity-libra-lu001-companyrawdata-dev',
Delimiter: '',
Prefix: 'samplecompany/',
};
const BucketList = () => {
const [listFiles, setListFiles] = useState([]);
useEffect(() => {
s3.listObjectsV2(params, (err, data) => {
if (err) {
console.log(err, err.stack);
} else {
setListFiles(data.Contents);
console.log(data.Contents);
}
});
}, []);
return (
<div className='card'>
<div className='card-header'>SampleCompany Files</div>
<ul className='list-group'>
{listFiles &&
listFiles.map((name, index) => (
<li className='list-group-item' key={index}>
{name.Key}
</li>
))}
</ul>
</div>
);
};
export default BucketList;
我正在尝试创建特定存储桶中所有文件的列表并将其呈现在 UI 上,我能够将信息记录到控制台,该控制台目前是 8 个数组对象,“Key”是每个文件的名称 属性,如下所示:
我遇到的问题是,当我尝试将这些“关键”属性设置为我的状态以便能够映射并在列表中显示它们时,我最终得到了数据 运行在控制台中连续循环,我不确定为什么。这是我目前在我的文件中的内容:
如果我尝试将“setListFiles”设置为控制台日志下方的“内容”,这就是连续循环开始发生的地方。如果我做错了一些简单的事情,请原谅我,因为这对我来说仍然是新的,但我真的很感激任何指导,在此先感谢!
我提到的无限循环是由于没有在 useEffect 中调用 s3.listObjects,所以调用了“setListFiles”,重新渲染组件并再次调用 s3.listObjects 循环然后重复因此我得到了无限循环。我对这个文件的最终代码是这样的:
import { useState, useEffect } from 'react';
import AWS from 'aws-sdk';
AWS.config.update({
accessKeyId: process.env.REACT_APP_ACCESS_ID,
secretAccessKey: process.env.REACT_APP_ACCESS_KEY,
region: process.env.REACT_APP_REGION,
});
const s3 = new AWS.S3();
const params = {
Bucket: 'elixivity-libra-lu001-companyrawdata-dev',
Delimiter: '',
Prefix: 'samplecompany/',
};
const BucketList = () => {
const [listFiles, setListFiles] = useState([]);
useEffect(() => {
s3.listObjectsV2(params, (err, data) => {
if (err) {
console.log(err, err.stack);
} else {
setListFiles(data.Contents);
console.log(data.Contents);
}
});
}, []);
return (
<div className='card'>
<div className='card-header'>SampleCompany Files</div>
<ul className='list-group'>
{listFiles &&
listFiles.map((name, index) => (
<li className='list-group-item' key={index}>
{name.Key}
</li>
))}
</ul>
</div>
);
};
export default BucketList;