尝试将多个图像以及表单数据上传到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,但是它不包含任何图像或任何其他数据,并且为空。
我找不到发生这种情况的实际原因。