【问题标题】:android file upload with retrofit to asp.net web apiandroid文件上传与改造到asp.net web api
【发布时间】: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


【解决方案1】:

您正在为文本创建不正确的 RequestBody

试试这个:

  RequestBody user = RequestBody.create(MediaType.parse("text/plain"), token.getUserId());

【讨论】:

  • 那是我的 userid 属性缺少公共修饰符 Hitesh,现在它可以正常工作了!非常感谢您的帮助!
猜你喜欢
  • 2020-07-10
  • 2021-07-07
  • 1970-01-01
  • 2014-05-15
  • 2016-11-14
  • 2012-07-27
  • 2020-01-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多