我在Amazon S3上托管了一个静态网站。在我的存储桶中,还存储了一些.txt,.pdf和.svg文件。我想用javascript在我的html网站上显示这些文件的列表(只命名没有内容)。由于用户可以将文件上传到存储桶,因此名称总是会更改。这就是为什么我要列出它们。而且,我不想列出所有文件而不是显示html文件,而是显示带有表的html文件,该表列出了存储桶中特定文件夹中的文件。
我不只将nodejs用作浏览器的js。我尝试不使用任何新模块。该项目应该保持简单。
我已经阅读了有关在Browserify的帮助下在浏览器中使用诸如“ fs”之类的nodejs模块的教程。我没有解决这个问题,也没有发现任何其他想法。
我阅读了有关FileSystemDirectoryReader for js的内容,但目前尚不支持。 WebKitFileSystem是否可以满足我的需求?我了解到,大多数fileSystem API都使用virtuall目录,而不是我需要的目录。
现在我想知道我是否真的需要npm模块之类的东西,因为我不想访问客户端文件系统,而是要访问S3上自己的文件系统。 我已经使用XMLHttpRequest从这些文件中读取了数据,但是我也可以只列出名称吗?
如果我有一些类似以下的代码,那就太好了: var arrFiles = []; arrFiles = readFiles(“ ./ files / *”);
另一种方法是使用AWS Lambda读取所有文件名,将它们保存为列表在文本文件中,然后使用js读取该文件以在网站上打印名称。似乎很复杂。
如果有任何意义。 预先感谢
答案 0 :(得分:0)
使用AWS AWS Mobile CLI和aws-amplify可以实现。它们是很棒的文档,还有site
上的示例基本上,您将创建aws移动集线器,配置S3存储桶,cognito,dynamodb以及所需的其他任何aws服务。
首先使用节点js安装AWS移动cli
npm install -g awsmobile-cli
配置它。
awsmobile configure
初始化您的项目
awsmobile init
一次将aws-amplify
节点程序包安装到您的项目中
npm i install aws-amplify
导入必要的模块并进行配置。
import Amplify, { Storage } from 'aws-amplify';
import aws_exports from './aws-exports';
Amplify.configure(aws_exports);
最后只需调用List
函数,它将在指定路径下列出键。
Storage.list('photos/')
.then(result => console.log(result))
.catch(err => console.log(err));
您可以执行各种功能,例如上载,下载和删除。它们由AWS团队维护和支持,不仅限于S3。
它们与Angular和react js都兼容。
答案 1 :(得分:0)
我现在使用lambda函数生成表内容。
在该lambda函数中,我使用aws.s3类和listObjectsV2()。它读取特定文件夹中的所有数据。我将所有找到的文件的名称写到存储在存储桶中的文本文件中。
每次页面重新加载时,js文件都使用XMLHttp Request读取该文本文件。这样它就可以获取bucket文件夹的内容,并且可以将名称写入表中。当我返回显示该表的网站主页时,总是触发lambda函数。