我使用外部API上传个人资料照片。 http://open.convio.com/api/#teamraiser_api.uploadPersonalPhoto_method.html
这是我的代码:
@Multipart
@POST("/CRTeamraiserAPI?method=uploadPersonalPhoto")
public void uploadPersonalPhotoAsync(
@Query("fr_id") int frId,
@Part("graphic_upload_file") TypedFile graphic_upload_file,
@Query("graphic_upload_upload") boolean graphic_upload_upload,
@Query("graphic_caption") String graphic_caption,
@Header("sso_auth_token") String token,
Callback<UploadPersonalPhotoResponse> callback);
这就是我使用它的方式
public void uploadPersonalPhotoAsync(final String cacheKey, int frID, String token, String graphic_upload_file, boolean graphic_upload_upload) {
File imgFile = new File(graphic_upload_file);
TypedFile tFile = new TypedFile("image/*", imgFile);
mTeamRaiserApi.uploadPersonalPhotoAsync(frID, tFile, true, "caption", token, new Callback<UploadPersonalPhotoResponse>() {
@Override
public void success(UploadPersonalPhotoResponse uploadPersonalPhotoResponse, Response response) {
uploadPersonalPhotoResponse.lastUpdatedTime = System.currentTimeMillis();
uploadPersonalPhotoResponse.loadedFromCache = false;
uploadPersonalPhotoResponse.cacheKey = cacheKey;
EventBus.getDefault().post(new UploadPersonalPhotoEvent(uploadPersonalPhotoResponse));
}
@Override
public void failure(RetrofitError error) {
EventBus.getDefault().post(new UploadPersonalPhotoEvent(null));
}
});
}
仅更新标题。该日志显示了API所要求的Content-Type:multipart / form-data。
答案 0 :(得分:0)
您确定您的服务器是否接受图片/ *。尝试使用image / png或image / jpeg。
如果它不起作用,请使用:
TypedFile typedFile = new TypedFile("multipart/form-data", new File("path/to/your/file"));
确保您没有指定标题
request.addHeader("Content-Type", "application/json");
通过RequestInterceptor。由于您要发送多部分数据而不是JSON,因此请求可能会在服务器端失败。
答案 1 :(得分:0)
我使用了API中的remove方法,它正在运行。 http://open.convio.com/api/#teamraiser_api.removePersonalPhoto_method.html
我这样实施:
@Multipart
@POST("/CRTeamraiserAPI?method=removePersonalPhoto")
public void removePersonalPhotoAsync(
@Query("fr_id") int frId,
@Part("BLABLABLA")String test,
@Query("graphic_upload_delete") boolean deletePhoto1,
@Header("sso_auth_token") String token,
Callback<RemovePersonalPhotoResponse> callback);
首先,我在没有使用@Multipart的情况下尝试并且无法正常工作。所以,我包括了@Multipart和一个随机的@Part参数和宾果游戏!然后我尝试对上传方法进行一些更改,从Query更改为Part,将图像作为TypedFile传递给RequestBody,作为编码String传递,并且没有任何效果。随着@Query的更新标题发送,但照片不是。