【发布时间】:2017-10-11 07:02:17
【问题描述】:
我正在尝试使用图片和字符串参数进行文件上传,文件上传成功,但字符串参数始终为空。请问其他人可以帮助我吗?提前致谢!
//Retrofit Interface
@Multipart
@POST("account/imageupload")
Call<ResponseBody> uploadProfilePicture(@Part MultipartBody.Part file,
@Part("userid") RequestBody userid);
//Activity
ApiClient apiClient = new ApiClient(token.getAccessToken(), "multipart/form-data");
ApiInterface apiService = apiClient.getClient().create(ApiInterface.class);
File file = new File(selectedImagePath);
RequestBody reqFile = RequestBody.create(MediaType.parse(getContentResolver().getType(selectedImageUri)), file);
MultipartBody.Part body = MultipartBody.Part.createFormData("file", file.getName(), reqFile);
RequestBody user = RequestBody.create(MultipartBody.FORM, token.getUserId());
Call<ResponseBody> call = apiService.uploadProfilePicture(body, user);
call.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
int statusCode = response.code();
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
String message = t.getMessage();
}
});
//Web API (C# web api)
[Route("imageupload")]
[HttpPost]
public async Task<IHttpActionResult> UploadProfilePicture([FromBody]
Models.ProfilePhotoUpload photo)
{
WriteImage(photo.file);
return Ok();
}
//Api Controller Model
public class ProfilePhotoUpload
{
string userid { get; set; }
public HttpFile file { get; set; }
}
问题是文件上传正确,但userid参数始终为空。
【问题讨论】:
-
我认为您的 android 代码运行良好,但 ASP.net 代码存在一些问题。
-
哦,你说得对,Haresh,我的 api 模型 userid 属性缺少 public 修饰符,我现在将其设置为 public,一切正常......非常感谢!
-
祝你好运。
标签: android asp.net-web-api file-upload retrofit2 multipartform-data