Skip to main content
 首页 » 编程设计

python之如何使用 goog.net.IframeIo 在 Python 中将文件上传到 Blobstore

2025年05月04日8over140

我在这里尝试将文件异步上传到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 代码获取文件,我就能上传它。 任何指示都会非常有帮助。

谢谢,
莫希特

请您参考如下方法:

这实际上不是关于 iframeio 的问题,而是关于在 AppEngine 中上传的问题。您缺少的是您应该首先在 GET 方法中创建一个要上传到的 URL,并将其用作 action表单的参数。查看sample application在 AppEngine 文档中。

所以在你的情况下,你会做 upload_url = blobstore.create_upload_url('/partner') ,并在您的模板中,<form action="{{ upload_url }}" method="POST" enctype="multipart/form-data">等