Как я могу устранить ошибку «[Errno 13] файл недоступен»?

#python #django #google-app-engine #blobstore

#python #django #google-app-engine #blobstore

Вопрос:

Мое веб-приложение использует Django (django-nonrel) в Google App Engine. Я пытаюсь открыть файл Blobstore.

Мой код успешно создает файл Blobstore и объект Photo для ссылки на имя файла Blobstore (вместе с некоторыми другими метаданными).

 from __future__ import with_statement
from google.appengine.api import files
import mimetypes

...

  file_name = files.blobstore.create(mime_type=mimetypes.guess_type(request.FILES['photo'].name)[0])

  with files.open(file_name, 'a') as f:
    f.write(photo_data)

  files.finalize(file_name)

  photo = Photo()
  photo.file_name = file_name
  ...
  photo.save()
  

Однако попытка открыть файл приводит к следующей ошибке:

 opened_file = open(photo.file_name)
  

Ошибка io в / post_photo_to_facebook/

[Ошибка 13] файл недоступен: ‘/blobstore/writable:NDNFUjNIVDdVQTM4Rk9aSE1aQkJMUzJUMzVDRVNRVEhJSjU3RUhWOE9ZMkk3QlNWR0FDR0JDOFUxSlA0Wlk3MA==’

Приветствуется любая помощь — спасибо за чтение!

Ответ №1:

Файлы Blobstore хранятся, ну, в общем, в blobstore. open это функция, которая открывает файлы в локальной файловой системе (по модулю особых случаев, таких как запись больших двоичных объектов). Согласно документам, если вы хотите открыть файл blobstore после его завершения, вам нужно вызвать files.blobstore.get_blob_key(file_name) имя файла, чтобы получить объект blob key, который вы должны использовать для ссылки на большой двоичный объект (и открыть его с помощью BlobReader ).).

Комментарии:

1. Спасибо, Ник, особый случай сбил меня с толку. Для чего полезно свойство file_name, возвращаемое files.blobstore.create()?

2. @bfox За создание большого двоичного объекта, как в фрагменте. Как только он будет завершен, он окажется в blobstore, и поэтому доступ к нему должен осуществляться с использованием его идентификатора большого двоичного объекта.