Доступ к файловой системе на стороне сервера с помощью JavaScript

Я размещаю статический веб-сайт на Amazon S3. В моем ведре также хранятся файлы .txt, .pdf, .svg. Я хочу отобразить список этих файлов (только имена без содержимого) на моем веб-сайте html с помощью javascript. Поскольку пользователи могут загружать файлы в корзину, имена всегда меняются. Вот почему я хочу их перечислить. И я не хочу перечислять все файлы вместо того, чтобы показывать файл html, а показывать файл html с таблицей, в которой перечислены файлы из определенной папки в корзине.

Я не использую nodejs только js для браузеров. Я стараюсь не использовать новые модули. Проект должен оставаться простым.

Я уже читал руководства по использованию модулей nodejs, таких как 'fs', в браузере с помощью browserify. Мне не удалось это или какие-либо другие идеи, которые я нашел.

Я читал кое-что о FileSystemDirectoryReader для js, но это пока еще не поддерживается. Отвечает ли WebKitFileSystem моим потребностям? Я понял, что большинство API файловой системы работают с виртуальными каталогами, а не с нужным мне каталогом.

Теперь мне интересно, действительно ли мне нужно что-то вроде модулей npm, поскольку я не хочу получать доступ к файловой системе клиента, а к моей собственной файловой системе на S3. Я уже прочитал данные из этих файлов с помощью XMLHttpRequest, но могу ли я просто перечислить имена?

Было бы здорово, если бы у меня был код вроде: вар arrFiles = []; arrFiles = readFiles ("./ файлы / *");

Другой подход заключается в использовании AWS Lambda для чтения всех имен файлов, сохранения их в виде списка в текстовом файле и чтения этого файла с помощью js для печати имен на веб-сайте. Кажется сложным.

Если в этом есть смысл. заранее спасибо

Браузеры не могут получить доступ к файловой системе сервера без помощи сервера, для этого вам определенно понадобится код на стороне сервера.

Teemu 16.08.2018 09:56

хорошо спасибо :). но почему тогда я могу читать содержимое этих файлов, а не имена всех файлов вместе?

tamara d 16.08.2018 09:59

@TamDo - потому что это принципиально разные вещи, с разными последствиями для безопасности, и одно разрешено в браузерах, а другое - нет. Возможно, вам удастся настроить свой веб-сайт S3 так, чтобы он имел страницу «индекса» (довольно стандартная функция для веб-серверов, но S3 - другой зверь). Если вы можете, вы можете запросить и проанализировать эту страницу с помощью кода JavaScript в браузере. Но я не знаю о хостинге сайтов S3, поэтому не знаю, возможно ли это.

T.J. Crowder 16.08.2018 10:01

хорошо, я не думал об этом. спасибо за ответы. Я попробую лямбда-решение aws.

tamara d 16.08.2018 10:03

Он выглядит как вы можете настроить индексный документ, но поскольку он будет отображаться, когда кто-то зайдет в корень вашего сайта, вы, вероятно, не захотите идти этим путем. Лямбда или, откровенно говоря, просто файл, поддерживаемый вручную, лучше всего подходит для вас.

T.J. Crowder 16.08.2018 10:04

jup этот индексный документ уже настроен, потому что его должны видеть пользователи сайта, когда они вводят URL-адрес корзины

tamara d 16.08.2018 10:07

Какой интерфейсный фреймворк вы используете? Потому что можно перечислить файлы в папке или ведре

Tiisetso Tjabane 16.08.2018 10:12

Я фактически не использую какую-либо структуру функциональности внешнего интерфейса. просто базовый js с библиотекой jquery

tamara d 16.08.2018 10:15

Вы можете проверить эту библиотеку. Я не являюсь автором, поэтому задавайте вопросы автору. github.com/rufuspollock/s3-bucket-listing

dereli 16.08.2018 13:42

Возможный дубликат Список каталогов на статическом веб-сайте S3

dereli 16.08.2018 13:43
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
10
302
2

Ответы 2

С AWS Мобильный интерфейс командной строки AWS и aws-ampify это возможно. Там отличная документация и примеры сайт

По сути, вы создаете мобильный концентратор aws, настраиваете ведро S3, когнитивно, Dynamodb и любые другие службы aws, которые вам понадобятся.

Сначала установите AWS mobile cli с node js

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.info(result))
       .catch(err => console.info(err));

Вы можете выполнять различные функции, такие как загрузка, загрузка и удаление. Они обслуживаются и поддерживаются командой AWS и не ограничиваются только S3.

Они совместимы как с Angular, так и с react js.

Спасибо за ответ. Я не использую nodejs, Angular или React. Поэтому я предпочитаю использовать простой класс AWS Lambda AWS.S3, который, как я выяснил, поддерживает метод listObjectsV2.

tamara d 16.08.2018 10:41

Вы можете использовать его с традиционным javascript с тегом script без необходимости использования angular или react js. Но способ Lamdba проще. Удачи и удачного кодирования

Tiisetso Tjabane 16.08.2018 10:47

Теперь я сгенерировал содержимое таблицы с помощью лямбда-функции.

В этой лямбда-функции я использую класс aws.s3 и listObjectsV2 (). Он считывает все данные в определенной папке. Я записываю имена всех найденных файлов в текстовый файл, который хранится в ведре.

Файл js использует запрос XMLHttp для чтения этого текстового файла при каждой перезагрузке страницы. Таким образом, он получает содержимое папки корзины и может записывать имена в таблицу. Лямбда-функция всегда срабатывает, когда я возвращаюсь на главную страницу своего веб-сайта, где отображается таблица.

Другие вопросы по теме