这里我尝试将文件异步上传到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对象上传文件的任何指针。 可以在here找到由blobstore上的google教程提供的python代码。
现在我被卡住了。我相信如果我能用python代码获取文件,我将能够上传它。 任何指针都会非常有用。
谢谢,
莫希特
答案 0 :(得分:1)
这不是关于iframeio的问题,而是关于在AppEngine中上传的问题。您缺少的是您应该在GET方法中创建一个首先上传到的URL,并将其用作表单的action
参数。请参阅AppEngine文档中的sample application。
因此,在您的情况下,您需要upload_url = blobstore.create_upload_url('/partner')
,并在模板中<form action="{{ upload_url }}" method="POST" enctype="multipart/form-data">
等。