我正在使用 python 作为 iPad 应用程序的服务器端在 GAE 上写作。其中一项功能是将文件保存在服务器上。我浏览了 blobstore 示例,我可以编写类似的有效测试。但是,就我而言,我必须将过程分为两个步骤,一个是调用生成 URL,另一个是通过 blobstore_handlers.BlobstoreUploadHandler 实际接收文件。问题是我从 blobstore.create_upload_url('/upload') 获得的链接似乎已损坏,并且找不到我的上传处理程序。我目前测试的方法是通过一个静态 html 文件,在该文件中我手动将 url 更改为我从 blobstore.create_upload_url('/upload') 获得的那个在职的?
代码:这是返回运行良好的 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))
这是我在本地使用的 html 并使用长链接更改 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))
谢谢您的帮助
冉