HTTPS POST リクエストを使用してサーバーに写真をアップロードしています。リクエストはマルチパートで、このコードを使用して写真をアップロードしています。
public HttpResponse uploadPhoto(File imagePath) {
try {
HttpPost httppost = new HttpPost(
"https://wbapi.cloudapp.net:443/api/Submission/UploadCompetitionEntry?folderName=photos");
MultipartEntity multipartEntity = new MultipartEntity(
HttpMultipartMode.BROWSER_COMPATIBLE);
httppost.setHeader( "Content-Type", "multipart/form-data" );
httppost.setHeader("Accept", "application/json");
httppost.setHeader("Authorization", getAuth());
multipartEntity.addPart("CompetitionID", new StringBody("84"));
multipartEntity.addPart("UserId", new StringBody(""
+ LoginActivity.id_user));
multipartEntity.addPart("Title", new StringBody(""
+ edit_title.getText().toString()));
multipartEntity.addPart("Summary", new StringBody(""
+ edit_description.getText().toString()));
multipartEntity.addPart("photos", new FileBody(imagePath,"image/jpeg"));
multipartEntity.addPart("MediaType", new StringBody("Photo"));
multipartEntity.addPart("Visibility", new StringBody("Public"));
multipartEntity.addPart("DateCreated", new StringBody(
"2013-01-04T10:07:46.9450000Z"));
httppost.setEntity(multipartEntity);
http = mHttpClient.execute(httppost);
} catch (Exception e) {
Log.v("Exception", "" + e.getMessage());
e.printStackTrace();
}
return http;
}
そして私のHTTPClientはこれです
mHttpClient = WinboutServerRequests.getHTTPClientObject();
これにより、ヘルパー クラスで HTTPS 証明書が処理されます。
リクエストを実行しているとき、e.getMessage() を null として取得しており、StackTrace でこれを取得しています
これらのエンティティをサーバーに送信する必要があります
送信するリクエスト
リクエスト
curl -X POST "https://wbapi.cloudapp.net:443/api/Submission/UploadCompetitionEntry?folderName=photos" -F "Summary=My description" -F "CompetitionID=84" -F "Title=写真タイトル" -F "MediaType=Photo" -F "AuthorName=dog" -F "UserId=1251" -F "DateCreated=2013-01-04T10:07:46.9450000Z" -F "Visibility=Public" -F "photos=@ /Users/akshayhegde/Library/Application Support/iPhone Simulator/5.1/Applications/D8A03B97-B7CC-4655-8987-8A54AE3E5FFC/Documents/UserData/competitionEntry/photoEntryHeaderImage.jpg;type=application/octet-stream"
答え :
欠落していたヘッダーに追加する必要があるこの承認がありました。追加しましたが、CientProtocolException を取得していません。
ファイルのMIMEタイプを取得するユーティリティ関数を追加
public static String getMimeType(String url)
{
String type = null;
String extension = MimeTypeMap.getFileExtensionFromUrl(url);
if (extension != null) {
MimeTypeMap mime = MimeTypeMap.getSingleton();
type = mime.getMimeTypeFromExtension(extension);
}
return type;
}
しかし、415 Unsupported Media Type エラーが発生しています。写真をアップロードするために ContentType を設定する必要がありますか?
送信するリクエストの例:
Content-Disposition: フォームデータ。name="競技ID"
3
Content-Disposition: フォームデータ。名前="ユーザーID"
1
Content-Disposition: フォームデータ。名前="タイトル"
シーザーとヒロ
Content-Disposition: フォームデータ。name="概要"
窓
Content-Disposition: フォームデータ。名前="メディアタイプ"
ビデオ
Content-Disposition: フォームデータ。name="作成日"
2012-06-07T02:17:57.09
Content-Disposition: フォームデータ。name="可視性"
公立/私立
Content-Disposition: フォームデータ。名前="写真"; ファイル名=IMG_9322.JPG
Content-Type:アプリケーション/オクテット ストリーム
Content-Disposition: フォームデータ。名前="動画"; ファイル名=sample.avi
Content-Type:アプリケーション/オクテット ストリーム
Content-Disposition: フォームデータ。名前="音楽"; ファイル名=sample.avi
Content-Type:アプリケーション/オクテット ストリーム
Content-Disposition: フォームデータ。name="著作物"; filename=sample.txt Content-Type:application/octet-stream