2014-08-31 2 views
0

Чтобы загрузить файл в blobstore или в GCS с использованием API Blobstore, сначала необходимо загрузить URL-адрес загрузки, а затем сделать явный запрос на загрузку Сервер хранения.
После того как файл был правильно сохранен, сервер перезаписывает запрос обработчику загрузки, который может быть обработкой, связанной с данными, связанными с файлом.GAE - Blobstore - Как правильно реагировать на сбои обработчика загрузки

Представьте, что теперь необходимо связать каждому файлу поле F, содержимое которого необходимо проверить. Если контент хорошо сформирован, можно просто сохранить его, например, вместе с информацией о файле в базе данных, но в противном случае, если F не подходит, просто нужно прервать процесс, говорящий пользователю, что F не является корректным.
Но в этом случае файл сохраняется в хранилище blobstore? Что делать, чтобы быть уверен, что файлы не сохранены?

То, что я думал, что это: просто я поймать исключение, и я удалить файл с помощью blobstore.delete (...) ...
Но он может не работать
Поэтому есть ли способ, чтобы иметь файл удалены с вероятностью 1, или есть более умный способ сделать сбои, не создавая отходов?

ответ

1

FYI, вы можете использовать данный метод удаления BlobInfo вместо blobstore.delete, если вы не пытаетесь удалить сразу несколько файлов. Существуют различные способы «гарантировать» удаление нежелательных загрузок блога, вот несколько вариантов (я уверен, что их еще много): 1) В UploadHandler отправляет задание (для удобства вы можете использовать отложенные задачи), который продолжайте называть себя до тех пор, пока не будет проверено успешное удаление (например, нет BlobInfo после получения). 2) Используйте GCS, сохраните начальную загрузку во временном месте и используйте экземпляр UploadHandler для GCS (https://developers.google.com/storage/docs/json_api/v1/objects/copy) для действительных объектов и выполните фоновое задание для удаления старых файлов temp.

+0

Почему BlobInfo.delete лучше, чем другой? – LJSilver

+0

Не лучше, BlobInfo делегирует blobstore.delete, передавая свой собственный ключ. Это просто немного чище, поскольку у вас уже есть BlobInfo. – ozarov

+0

Хорошо спасибо. Я пойду глубоко в идею временных файлов, спасибо! – LJSilver