iPadアプリのサーバー側でPythonを使用してGAEで書いています。機能の 1 つは、サーバーにファイルを保存することです。私はブロブストアの例を見て、動作する同様のテストを書くことができます. ただし、私の場合、プロセスを 2 つのステップに分割する必要があります。1 つは URL を生成するための呼び出し、もう 1 つは blobstore_handlers.BlobstoreUploadHandler を介して実際にファイルを受信するための呼び出しです。問題は、blobstore.create_upload_url('/upload') から取得したリンクが壊れているようで、アップロード ハンドラが見つからないことです。現時点でこれをテストする方法は、手動で URL を blobstore.create_upload_url('/upload') から取得したものに変更する静的 html ファイルを使用することです。プロセスを 2 つに分割すると、同じコードが停止する理由働く?
コード: これは、うまく機能する 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))
助けてくれてありがとう
ラン