Загрузка файлов Meteor + React + ReactRouter

В настоящее время я занимаюсь разработкой приложения с использованием Meteor, ReactJS и React Router (для маршрутизации). У меня есть требование, когда пользователь должен иметь возможность загружать заархивированный веб-сайт, а приложение Meteor должно отображать этот веб-сайт как часть одной из его страниц.

Типичный zip-файл будет содержать образец, подобный приведенному ниже,

ZippedFolder
    |-- css
    |    |-- bootstrap.css
    |    |-- bootstrap.min.css 
    |    +-- style.css
    |-- js
    |    |-- bootstrap.js
    |    |-- bootstrap.min.js
    |    +-- script.js 
    +- index.html

Я настроил CollectionFS для хранения zip-файла в файловой системе и, используя meteorhacks: npm и несколько пакетов npm, я могу распаковать этот файл в известное место.

HTMLContent = new FS.Collection("html_content", {
  stores: [new FS.Store.FileSystem("html_content"]
});

HTMLContent.on('stored', Meteor.bindEnvironment(function (fileObj) {
  let unzip = Meteor.npmRequire('unzip'),
    fs = Meteor.npmRequire('fs'),
    path = fs.realpathSync(process.cwd() +  '/../../../cfs/files/html_content/'),
    file = fs.realpathSync(path + '/' + fileObj.copies.html_content.key),
    output = path + '/' + fileObj._id;

    // TODO: Not the best ways to pick the paths. For demo only.

  if (!fs.existsSync(output)) {
    fs.mkdirSync(output);
  }
  fs.createReadStream(file).pipe(unzip.Extract({
    path: output
  }));
})); 

На компоненте React я загружаю заархивированное HTML-содержимое, используя следующий фрагмент кода.

handleZIPUpload(event) {
  FS.Utility.eachFile(event, function(file) {
    HTMLContent.insert(file, function(err, fileObj) {
      if (err) {
        console.log(err);
      } else {
        console.log(fileObj);
      }
    });
  });
},

render(){
  return (
    <input id="html_content" type="file" onChange={this.handleZIPUpload}/>
  )
}

Загрузка и распаковка работает. Однако CollectionFS не обслуживает HTML или другое содержимое по разархивированному пути.

 http://meteorhost/cfs/files/html_content/file_id/index.html

Я также попытался разархивировать html-контент в общую папку структуры папок метеора. Однако в метеорной документации говорится, что общая папка предназначена для статических ресурсов. Так как он поддерживает индекс активов в общей папке. Поэтому для обновления индекса требуется перезапуск сервера.

Есть ли другое место, где я мог бы разместить HTML-контент, который можно обслуживать как есть?

ОБНОВЛЕНИЕ Я решил эту проблему, настроив виртуальный каталог nginx и загрузив файлы в это место, чтобы nginx обслуживал содержимое HTML.

0 ответов

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