如何解决“[Errno 13]文件无法访问”错误?
问题描述:
我的web应用程序在Google App Engine上使用Django(django-nonrel)。我正在尝试打开Blobstore文件。如何解决“[Errno 13]文件无法访问”错误?
我的代码成功地创建了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)
IOError at /post_photo_to_facebook/
[Errno 13] file not accessible: '/blobstore/writable:NDNFUjNIVDdVQTM4Rk9aSE1aQkJMUzJUMzVDRVNRVEhJSjU3RUhWOE9ZMkk3QlNWR0FDR0JDOFUxSlA0Wlk3MA=='
任何帮助表示赞赏 - 感谢您的阅读!
答
Blobstore文件存储在blobstore中。 open
是一个在本地文件系统上打开文件的函数(以编写 blob为例的特殊情况)。根据the docs,如果要在完成后打开blobstore文件,则需要在文件名上调用files.blobstore.get_blob_key(file_name)
以获取应该用于引用blob的blob密钥对象(并使用BlobReader
将其打开)。
感谢尼克,这个特例让我失望。什么是files.blobstore.create()返回有用的file_name属性? – oldpal 2011-04-22 18:10:19
@bfox用于创建blob,如代码片段所示。一旦完成,它就在blobstore中,所以应该使用它的blob ID进行访问。 – 2011-04-23 00:49:27