2011-04-22 124 views
1

我的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=='

任何幫助表示讚賞 - 感謝您的閱讀!

回答

4

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

相關問題