从带有改造的android应用将具有表单数据的多个文件上传到.net core webapi

时间:2019-06-25 06:40:04

标签: android .net-core

尝试将多个图像以及表单数据上传到asp.net核心webapi。 webapi函数正在运行,但是没有数据发送到api。

WEB API代码:

[HttpPost]
        [Route("SaveSurvey2")]
        [Consumes("multipart/form-data")]
        public async Task<string> SaveSurvey2(List<IFormFile> files)
        {
            var size = files.Sum(f => f.Length);

            // full path to file in temp location
            var filePath = Path.GetTempFileName();

            foreach (var formFile in files)
            {
                if (formFile.Length > 0)
                {
                    using (var stream = new FileStream(filePath, FileMode.Create))
                    {
                        await formFile.CopyToAsync(stream);
                    }
                }
            }
            return "ok";
        }

Android代码:

 public void makeApiCall2(final Survey survey) {
        OkHttpClient.Builder httpClient = new OkHttpClient.Builder();

        Retrofit.Builder builder = new Retrofit.Builder().baseUrl(API_BASE_URL)
                .addConverterFactory(GsonConverterFactory.create());

        Retrofit retrofit = builder.client(httpClient.build()).build();
        RestWebApi client = retrofit.create(RestWebApi.class);

        MultipartBody.Builder builder2 = new MultipartBody.Builder();
        builder2.setType(MultipartBody.FORM);


        List<MultipartBody.Part> parts = new ArrayList<>();
        if(survey.isHouseBuildingSnapshotExists()){
            String filePath = Environment.getExternalStorageDirectory() + File.separator + "Household Survey" + File.separator + survey.getSurveyFolderName() + File.separator + "house_building" + ".jpg";
            Uri fileUri = Uri.parse(filePath);
            parts.add(prepareFilePart("houseBuilding", fileUri));
        }
        for (MultipartBody.Part part:parts) {
            builder2.addPart(part);
        }
        MultipartBody requestBody = builder2.build();

        Call<String> repos = client.savesurvey2(parts);
        repos.enqueue(new Callback<String>() {

        });
    }

像这样准备图像文件:

    private MultipartBody.Part prepareFilePart(String fileName, Uri fileUri){
        File file = new File(fileUri.getPath());
        RequestBody requestBody = RequestBody.create(MediaType.parse(getMimeType(fileUri)), file);
        return MultipartBody.Part.createFormData(fileName, file.getName(),requestBody);
    }

我已经尝试过以不同的方式进行操作,但是不确定当请求到达api时为什么数据为空。

主要问题是从android应用程序中击中了api,但是它不包含任何图像或任何其他数据,并且为空。

我找不到发生这种情况的实际原因。

0 个答案:

没有答案