2012-05-29 32 views
2

這裏我試圖上傳一個文件異步到blobstore。以下是我到目前爲止已經完成:如何使用goog.net.IframeIo在Python中將文件上傳到Blobstore?

HTML文件

<form id="my_form" enctype="multipart/form-data" method="POST" 
     action="/partner"> 
    <input type="file" id="my_file" name="my_file"/> 
</form> 

JS文件

my.Project.prototype.onFileUpload = function(e) { 
    var uploadForm = /** @type {HTMLFormElement} */ (
      goog.dom.getElement('my_form')); 
    var iframeIo = new goog.net.IframeIo(); 
    goog.events.listen(iframeIo, goog.net.EventType.COMPLETE, function() { alert('request complete'); }); 
    iframeIo.sendFromForm(uploadForm); 

Python代碼

class MyHandler(blobstore_handlers.BlobstoreUploadHandler): 
    def post(self): 
    logging.info(self.request) // I can see my file in this line's output 
    upload_files = self.get_uploads('my_file') 
    logging.info(upload_files) //upload_files come out to be an empty array 
    blob_info = upload_files[0] 
    self.redirect('/partner/serve/%s' % blob_info.key()) 

關於如何讓文件上傳到Request對象的任何指針。 由blobstore的google教程提供的python代碼可以在here找到。

現在我被卡住了。我相信如果我可以用Python代碼獲取文件,我將能夠上傳它。 任何指針都會非常有幫助。

感謝,
莫希特

回答

1

這是不是一個真正的關於iframeio的問題,而只是關於AppEngine上上傳。你錯過的是,你應該創建一個URL,首先在你的GET方法中上傳,然後用它作爲表單的action參數。請參閱AppEngine文檔中的sample application

所以你的情況,你會怎麼做upload_url = blobstore.create_upload_url('/partner'),且模板中,<form action="{{ upload_url }}" method="POST" enctype="multipart/form-data">

+0

感謝丹尼爾回答。在示例應用程序中,他們正在創建URL,因爲他們首先希望用戶在創建表單的MainHandler中着陸,以便於文件上載。如果你看到表單,他們已經提供了創建的URL。在我的情況下,我不想要MainHandler。所以我在我的HTML表單本身中有了ac​​tion =「URL」。此外,我可以成功擊中所需的處理程序。唯一的問題是從請求對象中取出文件。我希望這能更清楚地說明我的問題。 – EMM

+0

我不明白你的意見。您需要POST到'create_url'返回的URL,否則上傳不起作用。 AppEngine將處理上傳,然後發送到您自己的方法。 –

相關問題