如何解决“[Errno 13]文件无法访问”错误?

如何解决“[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将其打开)。

+0

感谢尼克,这个特例让我失望。什么是files.blobstore.create()返回有用的file_name属性? – oldpal 2011-04-22 18:10:19

+1

@bfox用于创建blob,如代码片段所示。一旦完成,它就在blobstore中,所以应该使用它的blob ID进行访问。 – 2011-04-23 00:49:27