そのため、GAE アプリケーションで filepicker.io を使用しようとしています。filepicker ウィジェットは、ユーザーがアップロードしたファイルの URL を返します。
この URL を使用してファイルを GAE のブロブストアにアップロードするにはどうすればよいですか?
ブロブストアは「フォームを介したファイルのアップロード」のみをサポートしているため、実際の問題は、ファイルの URL を含むフォーム POST を偽造する方法です。
そのため、GAE アプリケーションで filepicker.io を使用しようとしています。filepicker ウィジェットは、ユーザーがアップロードしたファイルの URL を返します。
この URL を使用してファイルを GAE のブロブストアにアップロードするにはどうすればよいですか?
ブロブストアは「フォームを介したファイルのアップロード」のみをサポートしているため、実際の問題は、ファイルの URL を含むフォーム POST を偽造する方法です。
フォーム投稿を偽装することは可能ですが、Files APIを使用する方がはるかに簡単です
編集:
urlfetch でファイル API を使用するには、次のように記述します。
from __future__ import with_statement
from google.appengine.api import files
from google.appengine.api import urlfetch
url = "http://www.facebook.com/somephoto.png"
result = urlfetch.fetch(url)
if result.status_code not 200:
return "some error"
# Create the file
file_name = files.blobstore.create(mime_type='application/octet-stream')
# Open the file and write to it
with files.open(file_name, 'a') as f:
f.write(result.content)
# Finalize the file. Do this before attempting to read it.
files.finalize(file_name)
# Get the file's blob key
blob_key = files.blobstore.get_blob_key(file_name)
私はこれをテストしていないので、うまくいかない場合はお知らせください。
また、mime_type を「application/octet-stream」のままにしておくと、App Engine が適切なタイプを推測しようとします。それでもうまくいかない場合は、'image/png' に変更してみてください。または、pdf の場合、MIME タイプは「application/pdf」になります。
一番多く投票された回答のファイル API は廃止されたため、この問題を解決するための要点を github に書きました。画像の URL を取得し、リクエストとポスターを使用して独自のサーバーに投稿します。
私たちは実際にブラウザをハッキングして、あなたが説明したのとまったく同じ種類のものを偽造できるかどうかを見つけるためにかなりの時間を費やしましたが、役に立ちませんでした. Kyle が URL からファイル オブジェクトを取得することを提案したように、いくつかの簡単なバックエンド コードを作成することをお勧めします。
XMLHttpRequest POST multipart/form-dataおよびIs it possible to fake a multipart/form-data post with a jquery ajax call? を参照してください。これを行う方法に関するいくつかのアイデアについて