2017-02-16 5 views
1

ローカル開発サーバーでGAEコードをデバッグしようとしましたが、壁に衝突しました。このコードでは、GoogleのBlobstoreサービスを使用してファイルのアップロードを容易にしています。このコードは本番環境ではうまく動作しますが、私のローカル開発サーバーではうまく動作しません。ブロブストアGAEクラウドツールとローカル開発サーバーに関する問題

私は自分のJSPでblobstoreService.createUploadUrl("/uploadSurvey")のフォームアクションとして標準のGoogleパターンを使用していて、サーブレットのblobstoreService.getUploads(request)を呼び出しています。

ファイルが正しくアップロードされた(私はローカル管理コンソールを使用して、それを見ることができる)が、getUploads()への呼び出しが例外をスローします:java.lang.IllegalStateException: Must be called from a blob upload callback request.

は、デバッガ内の要求を見てみると、必要なblobkey属性が見つかりませんまた、フォーム内の他の入力パラメーターもありません。生のリクエスト(/ _ah/upload/...にディスパッチされたリクエスト)を見ると、フォームパラメータが存在します。

Googleのクラウドツールapp-engine-pluginを使用しています。これは、生成された戦争を実行するためにgcloud python devサーバーを使用します。

私はblobstoreが古いGAE機能であることを認識していますが、このコードはprodで「作業中」であるため、新しいサブシステムに切り替える必要はありません。

誰かが私のdevサーバー上でこれをすべて稼働させるためにどこに手掛かりを与えることができますか?

おかげで、

- デイブ

P.S.私はのgcloud devserver2ディレクトリの下http_proxy.pyにいくつかのデバッグを追加し、このコンテンツタイプのビーイングを観察

POST /uploadSurvey HTTP/1.1 
Accept-Encoding: identity 
X-APPENGINE-BACKEND-ID: 8 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
X-APPENGINE-SERVER-NAME: localhost 
Cookie: JSESSIONID=5773y31x3eut 
X-Appengine-User-Email: 
X-APPENGINE-DEFAULT-VERSION-HOSTNAME: localhost:8888 
X-APPENGINE-SERVER-PROTOCOL: HTTP/1.1 
X-Appengine-User-Organization: 
X-APPENGINE-DEV-SCRIPT: unused 
ORIGIN: http://localhost:8888 
X-Appengine-User-Id: 
Accept-Language: en-us 
X-APPENGINE-SERVER-SOFTWARE: Development/2.0 
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/602.4.8 (KHTML, like Gecko) Version/10.0.3 Safari/602.4.8 
X-Appengine-User-Nickname: 
Host: localhost:8888 
X-Appengine-Dev-Request-Id: wCTAonUKrB 
Content-Type: multipart/form-data; boundary="===============1477989950756010976==" 
Content-Length: 1372 
X-APPENGINE-REQUEST-LOG-ID: 5e8eaef5aff4add89b774badea1fd3a30da8be 
X-Appengine-User-Is-Admin: 0 
UPGRADE-INSECURE-REQUESTS: 1 
X-APPENGINE-SERVER-PORT: 8888 
Referer: http://localhost:8888/settings 
X-AppEngine-Country: ZZ 
X-APPENGINE-REQUEST-ID-HASH: BFD4FDDA 
X-APPENGINE-REMOTE-ADDR: ::1 

を更新:下記アップロードされたファイルが取り除かれた後、私のサーブレットに転送要求があります転送されます。コンテンツが存在しているように見えるように私は、回避策を考え出し

--===============5516630363169856841== 
Content-Type: message/external-body; blob-key="XOQvaKc1cdczcwkIHfRFOw=="; access-type="X-AppEngine-BlobKey" 
Content-Disposition: form-data; name="myFile"; filename="Naro Group - SNHU - Sales Readiness Assessment - Dec 2016.xls" 

Content-Type: application/vnd.ms-excel 
Content-Length: 164352 
Content-MD5: NjBiNjI0N2M3MjZiMzc3NWMxZDQxYmM5YTU2YmM5YmM= 
content-disposition: form-data; name="myFile"; filename="Naro Group - SNHU - Sales Readiness Assessment - Dec 2016.xls" 
X-AppEngine-Upload-Creation: 2017-02-16 20:17:05.729401 


--===============5516630363169856841== 
Content-Type: text/plain 
Content-Disposition: form-data; name="newSurveyId" 

10001 
--===============5516630363169856841== 
Content-Type: text/plain 
Content-Disposition: form-data; name="newSurveyName" 

N 
--===============5516630363169856841== 
Content-Type: text/plain 
Content-Disposition: form-data; name="newUserMessage" 


--===============5516630363169856841== 
Content-Type: text/plain 
Content-Disposition: form-data; name="selectedClient" 

6 
--===============5516630363169856841== 
Content-Type: text/plain 
Content-Disposition: form-data; name="selectedPsf" 

3 
--===============5516630363169856841== 
Content-Type: text/plain 
Content-Disposition: form-data; name="selectedSection" 

1 
--===============5516630363169856841==-- 

答えて

0

私は...、今でも多くの混乱しているが、私は、Googleの人々が見てする必要があり、ここでバグがあると思います。クラウドツールのpython devサーバーは、すべての重要なX-AppEngine-BlobUploadヘッダー要素を書き換えられた要求ヘッダーに入れていませんでした。これを行うにはblob_upload.pyとhttp_proxy.pyを修正しました(google-cloud-sdkの下のツール/ devserver2)。私は、非標準のリクエストペイロードを処理し、欠落しているリクエスト属性を構築し、アクセス可能な元のリクエストパラメータを作るために、Googleの独自のプロダクションサーバコードベースであるParseBlobUploadFilter.javaからいくつかのコードを作成しなければなりませんでした。もちろん、このコードパスは、ローカルのdevサーバーで実行しているときにのみ取得する必要があります。このコードはGoogle App Engineによって正しく呼び出されます。

関連する問題