Как справиться с загрузкой html-контента в приложение AppEngine? - PullRequest
2 голосов
/ 14 декабря 2011

Я бы хотел, чтобы мои пользователи могли загружать контент HTML в мое веб-приложение AppEngine.Однако, если я использую Blobstore для загрузки всех файлов (HTML-файлы, CSS-файлы, изображения и т. Д.), Это вызывает проблему, поскольку все ссылки на другие файлы (страницы, ресурсы) не будут работать.

Iвижу две возможности, но обе они не очень красивые, и я бы хотел их не использовать:

  • Перейдите по всем ссылкам в html-файлах и измените их на соответствующий ключ BLOB-объекта..

  • Сохранение сопоставления между файлом и ключом BLOB-объекта, перехват всех перенаправлений и обслуживание BLOB-объектов (может вызвать проблемы с файлами с одинаковыми именами).

Как я могу решить это элегантно, не переходя и не изменяя файлы моего пользователя?

Ответы [ 2 ]

1 голос
/ 14 декабря 2011

Поскольку механизм приложений запускает ваш контент на нескольких серверах, вы не можете записывать в файловую систему.Что вы можете сделать, это попросить их загрузить zip-файл, содержащий их html, css, js, images, ... Модуль zipfile из python доступен в appengine, поэтому вы можете разархивировать эти файлы и сохранить их по отдельности.Таким образом, вы знаете структуру каталогов zip.Это позволяет создать сопоставление относительных путей к содержимому в хранилище BLOB-объектов.У меня недостаточно опыта работы с zipfile, чтобы написать полный пример здесь, я надеюсь, что кто-то более опытный сможет отредактировать мой ответ или создать новый с примером.

0 голосов
/ 15 декабря 2011

Сохранение сопоставления - лучший вариант здесь. Вам нужно будет каким-то образом идентифицировать группу файлов, поскольку несколько пользователей могут загрузить файл с одинаковым именем, а затем связать уникальные имена путей с каждым файлом в этой группе. Вы можете использовать имена ключей, чтобы упростить поиск хранилища данных, связанного с данным путем. Перенаправления не требуются - просто используйте стандартный подход обслуживания Blobstore, задав заголовок Blobstore, чтобы App Engine обслуживал большой двоичный объект пользователю.

Другой вариант - загрузить zip, как предлагает Фредерик. Нет необходимости распаковывать и хранить файлы по отдельности - вы можете подавать их прямо из почтового индекса в blobstore, как это демонстрационное приложение .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...