アップロードされたバイナリ ファイルを処理するためのサーバー側コードがあります。
class UploadHandler(webapp.RequestHandler):
def post(self):
file_name = files.blobstore.create(mime_type='application/octet-stream')
with files.open(file_name, 'a') as f:
f.write('data')
files.finalize(file_name)
blob_key = files.blobstore.get_blob_key(file_name)
これは例のコードであるため、実際にはアップロードされたファイルを処理せず、新しい Blobstore エンティティを作成し、これにデータを書き込むだけです。クライアント側からは、実際にファイルをサーバーに送信するコードのこの部分があります。
var xhr = new XMLHttpRequest();
xhr.open("post", "/upload", true);
xhr.setRequestHeader("Content-Type", "multipart/form-data");
xhr.setRequestHeader("X-File-Name", file.fileName);
xhr.setRequestHeader("X-File-Size", file.fileSize);
xhr.setRequestHeader("X-File-Type", file.type);
xhr.send(file);
FireBug では、ファイルがサーバーにアップロードされ、サーバー コードが想定どおりにファイルを作成することがわかります。私が理解できないのは、サーバー側のコードがアップロードされたファイルをストリームとして受信できるように、これら 2 つの部分を接続する方法です。私はフォームを使用しないので、のようなファイルを取得できませんupload_files = self.get_uploads('file')
。サーバー側でファイルを取得するにはどうすればよいですか?
更新: webapp 要求ハンドラーに関する GAE ドキュメントで回答を見つけました。uploaded_file = self.request.body
ファイルストリームを取得するには、このようなものを使用する必要があります。それから私はそれf.write(uploaded_file)
を保存するために使用します。それは私のために働くようです。それが良いアプローチである場合は、あなたの考えを共有してください。