Прочтите править в нижней части вопроса для возможного альтернативного решения, пока решение не будет найдено.Модернизация 2 не может загрузить файл с двумя дополнительными отдельными строковыми параметрами
Это успешный почтовый файл с двумя параметрами с использованием POSTMan. Я пытаюсь сделать то же самое с модификацией, но получаю BadRequest.
Почтальон Настройки:
Теперь вот как я это делаю в Android, но не суметь:
Дооснащение Интерфейс службы:
@Multipart
@POST("jobDocuments/upload")
Call<ResponseBody> upload(@Part("file") MultipartBody.Part file,@Part("folder") MultipartBody.Part folder,@Part("name") MultipartBody.Part name);
Это мой @Background метод для запуска сетевого запроса с вышеуказанной службой генерируется
CustDataClient service =
ServiceGenerator.createService(CustDataClient.class);
File file = new File(fileUri.getPath());
// create RequestBody instance from file
RequestBody requestFile =
RequestBody.create(MediaType.parse("multipart/form-data"), file);
MultipartBody.Part fileData =
MultipartBody.Part.createFormData("file", fileName, requestFile);
MultipartBody.Part folder =
MultipartBody.Part.createFormData("folder", "LeadDocuments");
MultipartBody.Part name =
MultipartBody.Part.createFormData("name", fileName);
// finally, execute the request
Call<ResponseBody> call = service.upload(fileData,folder,name);
try {
Response<ResponseBody> rr = call.execute();
ResponseBody empJobDocsResult = rr.body();//Bad Request here :(
Log.v("Upload", "success");
} catch (Exception ex) {
Log.e("Upload error:", ex.getMessage());
}
Вот мой Web Api Метод:
[Route("upload")]
[HttpPost]
public IHttpActionResult Upload()
{
if (HttpContext.Current.Request.Files.AllKeys.Any())
{
// Get the uploaded image from the Files collection
var httpPostedFile = HttpContext.Current.Request.Files["file"];
if (httpPostedFile != null)
{
// Validate the uploaded image(optional)
var folder = HttpContext.Current.Request.Form["folder"];
var fileName = HttpContext.Current.Request.Form["name"];
fileName = string.IsNullOrEmpty(fileName) ? httpPostedFile.FileName : fileName;
// Get the complete file path
var fileSavePath = Path.Combine(HttpContext.Current.Server.MapPath("~/Files/" + folder), fileName);
// Save the uploaded file to "UploadedFiles" folder
httpPostedFile.SaveAs(fileSavePath);
return Ok(new OkMessage { Message = "File uploaded successfully", Path = "/Files/" + folder + "/" + fileName });
}
}
return BadRequest("File not uploaded");
}
Пожалуйста, помогите, где я я ошибаюсь и как это сделать, есть ли простая альтернатива модернизации?
[Редактировать] Этот код успешно работает, благодаря koush/ion:
Ion.with(getContext())
.load("POST", "http://www.dgheating.com/api/jobDocuments/upload")
.setMultipartParameter("folder", "LeadDocuments")
.setMultipartParameter("name", fileName)
.setMultipartFile("file", new File(imagePath))
.asJsonObject()
.setCallback(...);
Я была такая же проблема с Android, и точнее, с 4.1.1; Теперь, используя пример с Ion, проблема решена, и теперь я могу без проблем загружать файлы (изображения в моем случае). Вы должны опубликовать редактирование Ion как ответ (я думаю). –
Нет, это не решение проблемы, а альтернатива (избегая проблемы). – ahmadalibaloch
это отстой. Вы когда-нибудь находили решение этого? –