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();

这会处理带有 Helper 类的 HTTPS 证书内容。

当我执行请求时,我将 e.getMessage() 设为 null 并且在 StackTrace 中我得到了这个

我必须将这些实体发送到服务器

要求发送

要求

curl -X POST "https://wbapi.cloudapp.net:443/api/Submission/UploadCompetitionEntry?folderName=photos" -F "Summary=我的描述" -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 以上传图片吗?

要发送的样品请求:

内容处置:表单数据;名称=“比赛ID”

3

内容处置:表单数据;名称="用户ID"

1

内容处置:表单数据;名称="标题"

凯撒和希罗

内容处置:表单数据;名称=“摘要”

窗户

内容处置:表单数据;名称="媒体类型"

视频

内容处置:表单数据;名称="创建日期"

2012-06-07T02:17:57.09

内容处置:表单数据;名称="可见性"

公共/私人

内容处置:表单数据;名称="照片"; 文件名=IMG_9322.JPG

内容类型:应用程序/八位字节流

内容处置:表单数据;名称=“视频”;文件名=sample.avi

内容类型:应用程序/八位字节流

内容处置:表单数据;名称="音乐"; 文件名=sample.avi

内容类型:应用程序/八位字节流

内容处置:表单数据;名称="文字"; 文件名=sample.txt 内容类型:应用程序/八位字节流

4

0 回答 0