Я не могу понять, что не так и почему этот пост возвращает Error 500
только с файлами PDF, он нормально работает с файлами XML.
Я попытался изменить значения заголовков во многих отношениях, он продолжает отвечать ту же ошибку:
Сервер обвинен:
MultipartException: Failed to parse multipart servlet request; nested exception is org.apache.commons.fileupload.FileUploadBase$IOFileUploadException: Processing of multipart/form-data request failed. Stream ended unexpectedly
Содержание:
public class UploadRequest
{
public byte[] fileToUpload { get; set; }
public string fileType { get; set; }
public string fileReference { get; set; }
public string issueDate { get; set; }
public string userId { get; set; }
public string headerValue { get; set; }
public string fileName { get; set; }
public UploadRequest(string fileName, byte[] fileToUpload, String fileType, String fileReference,
String issueDate, String userId, String headerValue)
{
this.fileName = fileName;
this.fileToUpload = fileToUpload;
this.fileType = fileType;
this.fileReference = fileReference;
this.issueDate = issueDate;
this.userId = userId;
this.headerValue = headerValue;
}
public MultipartFormDataContent getFormContent(){
var fileToUploadContent = new ByteArrayContent(fileToUpload, 0, fileToUpload.Length);
fileToUploadContent.Headers.Add("content-type", "application/" + headerValue); // 'pdf' or 'xml'
return new MultipartFormDataContent
{
{ fileToUploadContent, "file", fileName},
{ new StringContent(fileType), "fileType"},
{ new StringContent(fileReference), "fileReference"},
{ new StringContent(issueDate), "issueDate"},
{ new StringContent(userId), "userId"}
};
}
}
Почтовый метод:
public class Upload
{
private HttpClient client = new HttpClient();
private string urlBase = "https://xxxxxxxx-xx.xx.us10.hana.xxxxx.com/file/upload/ImportDeclaration/";
public async void sendFilesWs(UploadRequest requestData, Int64 ?processNumber)
{
try
{
client.BaseAddress = new Uri(urlBase);
client.DefaultRequestHeaders.Add("Authorization", "Apikey xxxx-d87a-xxxx-9a36-xxxx");
client.DefaultRequestHeaders.Add("Origin", "https://xxxxxx.com");
} catch(Exception e)
{
// has header
}
HttpResponseMessage response = await client.PostAsync(processNumber.ToString(), requestData.getFormContent());
string contents = await response.Content.ReadAsStringAsync();
//Console.Write(response.StatusCode);
}
}
Звонок:
private void Form1_Load(object sender, EventArgs e)
{
var pdfFile= System.IO.File.ReadAllBytes(this.Dir + "\\" + _fileName);
var uploadRequest = new UploadRequest(_fileName, PdfFile, "Other",
number,
DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"),
"99999999", "pdf");
Upload _Upload = new Upload();
_Upload.sendFileWs(uploadRequest, _processNumber);
}
Заранее большое спасибо.
Обновление:
Серверная часть была построена на Spring Boot 2
пружинный башмак 2 без фильтров:
@Override
@PostMapping("/{documentTag}/{documentId}")
public ResponseEntity<?> postFile(
@RequestParam("file") MultipartFile file,
@RequestParam("fileType") String fileType,
@RequestParam("fileReference") String fileReference,
@RequestParam("issueDate") String issueDate,
@RequestParam("userId") String userId,
@PathVariable(value = "documentTag") String documentTag,
@PathVariable(value = "documentId") Long documentId) {
logger.info("File received by File Service");
FileInformation fileInformation = new FileInformation(FileType.of(fileType), fileReference, issueDate, userId);
return fileUploadBusiness.upload(file, fileInformation, documentTag, documentId, request.getHeader("Authorization")
);