使用JavaScript进行服务器端文件系统访问

时间:2018-08-16 07:54:17

标签: javascript amazon-web-services amazon-s3 xmlhttprequest filesystems

我在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读取该文件以在网站上打印名称。似乎很复杂。

如果有任何意义。 预先感谢

2 个答案:

答案 0 :(得分:0)

使用AWS AWS Mobile CLIaws-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函数。