外部アプリケーションからappengineへのblobのアップロードに関して、最近何か変更があったのではないかと思いました。わずか3か月前は完全に機能していましたが、http投稿を行ってblobをアップロードするときにハングアップしています。
以前は正常に機能していたコード(以下を参照)は、AppEngineからプルキューをフェッチし(REST APIを使用)、受け取ったこのタスクでいくつかの処理を実行し、結果をAppEngineにBlobとしてアップロードすることで構成されています。BLOBをアップロードするURLは、appengineがblobstoreService.createUploadUrl( "/ upload");を使用して作成します。
次の形式です。
http://myapp.appspot.com/_ah/upload/AMmfu6aAHnkuS4ngyRJDn7urFFZeBxb_-3P-r7RY9udMvRjLWkEZNJMgUX1DFczNVi-NhIxcFat2AEPXs2IRJ0AOmznSMgcrCKmL7mGAmS7nqtr-UyYFkglD88BwCfzIui9M2yez7DSQ/ALBNUaYAAAAAUGRlEwpeGEc5ozp8Z8sDO33qgCi2AiIE/
AppEngineのログを確認しましたが、/uploadを担当するサーブレットがトリガーされていないようです。
私はこの段階で正直なところアイデアがありません。どんな助けでも大歓迎です!:-)
乾杯、
キリアン
public boolean uploadAsBlob(String dataToWrite, String uploadURL) {
try {
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(tempFileLocation));
bufferedWriter.write(dataToWrite);
bufferedWriter.newLine();
bufferedWriter.close();
MultipartEntity entity = new MultipartEntity();
entity.addPart(blobFileName, new FileBody(new File(tempFileLocation)));
HttpPost method = new HttpPost(uploadURL);
method.setEntity(entity);
final HttpParams httpParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParams, 10000);
DefaultHttpClient httpclient = new DefaultHttpClient(httpParams);
//It hangs at the following line!
HttpResponse response = httpclient.execute(method);
if (response.getStatusLine().getStatusCode() == 200) {
logger.info("Uploaded blob to url: " + uploadURL);
return true;
} else {
logger.warning("Couldn't upload blob to url: " + uploadURL);
}
} catch (Exception e) {
logger.warning("Exception " + e.getMessage() + " occured while uploading blob to url:" + uploadURL);
logger.warning("Couldn't upload blob to url: " + uploadURL);
}
return false;
}