2

在这里,我尝试将文件异步上传到 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);

蟒蛇代码

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 的 python 代码可以在这里找到。

现在我被困住了。我相信如果我能用 python 代码获取文件,我就可以上传它。任何指针都会非常有帮助。

谢谢,
莫希特

4

1 回答 1

1

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

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

于 2012-05-29T09:25:44.867 回答