0

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

4

0 に答える 0