我正在使用 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 内容类型:应用程序/八位字节流