4

httpリクエストを使用してblobstoreにファイルを送信しようとしています。

まず、createUploadUrlを呼び出してアップロードURLを取得するボタンを作成しました。

それから私はクライアントを作りました:

HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(URL_FROM_CREATEUPLOADURL);

httpPost.setEntity(new StringEntity("value1"));
HttpResponse httpResponse = httpClient.execute(httpPost);

しかし、私には2つの問題があります。

  • 開発モードの場合:クライアントを実行すると、「最初にset * BlobStorage()のいずれかを呼び出す必要があります」と応答します。

  • アプリをアップロードした場合:URLは呼び出すたびに変わるため、クライアントを実行すると「HTTP /1.1500内部サーバーエラー」と応答します。

私が間違っているのは何ですか?

4

2 に答える 2

5

単一のアップロードURLをハードコーディングしようとしているようです。それはできません。アップロードするファイルごとに新しいファイルを生成する必要があります。

また、formencodingやraw bodyを使用するのではなく、ファイルをマルチパートメッセージとしてアップロードすることを確認する必要があります。私はJavaAPIに精通していませんが、リクエストの生の本文を設定しているようです。

于 2011-01-11T01:23:49.713 に答える
5

どうやらエンティティはMultiPartEntityでなければなりません。

これは、URLを取得するためのクライアントコードです。

HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(myDomain/mayServlet);
HttpResponse httpResponse = httpClient.execute(httpPost);
Header[] headers = httpResponse.getHeaders(myHeader);
for (int i = 0; i < headers.length; i++) {
Header header = headers[i];
if(header.getName().equals(myHeader))
uploadUrl = header.getValue();

これは、URLを返すサーバーコードです。

BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
String uploadUrl = blobstoreService.createUploadUrl(requestHandlerServlet);
resp.addHeader("uploadUrl", uploadUrl);

これはクライアントのアップロードコードです。

HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(uploadUrl);
MultipartEntity httpEntity = new MultipartEntity();
ContentBody contentBody = new FileBody(new File("filePath/fileName"));
httpEntity.addPart("fileKey", contentBody);
httpPost.setEntity(httpEntity);
HttpResponse httpResponse = httpClient.execute(httpPost);

とても簡単... ​​:(

于 2011-01-13T06:18:37.063 に答える