我正在GAE上使用python作为iPad App的服务器端。其中一项功能是在服务器上保存文件。我浏览了blobstore示例,我可以编写类似的测试工具。但是,在我的情况下,我必须将进程分为两个步骤,一个调用生成URL,另一个是通过blobstore_handlers.BlobstoreUploadHandler实际接收文件。 问题是我从blobstore.create_upload_url('/ upload')获得的链接似乎被破坏,我的上传处理程序无法找到。我现在测试这个的方法是通过静态html文件,我手动将url更改为我从blobstore.create_upload_url('/ upload')获取的URL 任何想法为什么一旦我将进程分成两个相同的代码停止工作?
代码: 这是返回运行良好的url的函数。
class GetUploadURL(webapp2.RequestHandler):
# this function will return the upload url to be used in a form
def get(self):
params=['session_id']
has_params, missing_param = has_all_parameters(self,params)
if not has_params:
show_error(self, MISING_PARAMS_ERROR, params)
return
user = validate_session(self)
if not user:
show_error(self, UNKNOWN_SESSION_ID)
return
upload_url = blobstore.create_upload_url('/upload')
ret_dict = { STATUS_CODE :STATUS_OK ,
UPLOAD_URL : upload_url
}`enter code here`
self.response.out.write(json.dumps(ret_dict))
,这是我的本地使用和更改upload_url与我获得调用上面的函数形式的长链接
<html>
<body>
<form action="upload_url" method="POST" enctype="multipart/form-data">
<input type="hidden" id="session_id" name="session_id" value="ahJkZXZ-ZGVzaWduZWRudG9maXRyDQsSB1Nlc3Npb24YDQw" >
<a>Upload File: </a><input type="file" name="file">
<br>
<input type="submit" name="submit" value="Submit">
</form>
</body>
</html>
在这里,当我点击提交时,它甚至没有到达服务器,它就像一个断开的链接。
这是应该接收帖子的函数,但它从未被调用
class UploadHandler(blobstore_handlers.BlobstoreUploadHandler):
def post(self):
params=['session_id']
has_params, missing_param = has_all_parameters(self,params)
if not has_params:
show_error(self, MISING_PARAMS_ERROR, params)
return
user = validate_session(self)
if not user:
show_error(self, UNKNOWN_SESSION_ID)
return
upload_files = self.get_uploads('file') # 'file' is file upload field in the form
blob_info = upload_files[0]
file1 = UserFile()
file1.user = user
file1.file_name= blob_info.filename
file1.file_key = blob_info.key()
file1.put()
ret_dict = {STATUS_CODE: STATUS_OK,'file_key': str(file1.file_key)}
self.response.out.write(json.dumps(ret_dict))
感谢您的帮助
冉