Вопрос может быть глупым для всех вас, но я бьюсь головой с 1 недели, чтобы решить одну проблему в моем приложении с весенней загрузкой.
Я разработал один API для чтения файла, который состоит из нескольких частейотправлено от многих клиентов.
Я протестировал API через почтальона, который дал мне ожидаемый результат, но когда я вызвал API от клиента, он даже не достиг контроллера весенней загрузки.
вот как мой кодвыглядит в Springboot
@RestController
@RequestMapping("/v2")
public class PDFExtractController {
private static final long serialVersionUID = 1L;
@RequestMapping(value = "/document/{DocType}",method =RequestMethod.POST, produces = MediaType.APPLICATION_JSON_UTF8_VALUE, consumes =MediaType.MULTIPART_FORM_DATA_VALUE )
public ResponseEntity fileUpload(@PathVariable("DocType") String docType, @RequestParam("pdf") MultipartFile multipartfiles, @RequestParam(name ="provider", required=false) String AcceptProvider, @RequestParam(name= "verbose", required=false) String AcceptVerbose,@RequestParam(name= "pdf_password",required=false) String AcceptPass, HttpServletRequest request){
boolean isMultipartContent = ServletFileUpload.isMultipartContent(request);
String provider = null;
String password = null;
boolean verbose= false;
try{
MultipartFile uploadedFile = multipartfiles;
if(uploadedFile!=null){
String fieldname = uploadedFile.getName();
if(AcceptProvider!=null){
provider=AcceptProvider.trim();
SplunkMgr.addtoMDC(MDCFieldNames.PROVIDER.getValue(), provider.trim());
}
if(AcceptVerbose!=null){
verbose = "true".equals(AcceptVerbose.trim());
}
if (PESConstants.PARAM_PDF.equals(fieldname)) {
file = uploadedFile.getBytes();
}
if(AcceptPass!=null){
password=AcceptPass.trim();
SplunkMgr.addtoMDC(MDCFieldNames.PASSWORD_PROVIDED.getValue(), String.valueOf(password != null));
}
}
}// Network problem
catch (IOException e) {
log.error("Network error when receiving request.", e);
PDFExtractResult pdfExtractResult = new PDFExtractResult().markInError(PdfExtractReferenceMgr.instance().getMessage(MessageConstants.InvitcoMsgCode.PES_NETWORK_ERROR));
responseData = PdfServletMgr.createResponseJson(pdfExtractResult, verbose);
}
//---here is my code to process the file and sending the response----
}
Но мой клиент отправляет, как показано ниже
HttpURLConnection connection = (HttpURLConnection)new
URL(url).openConnection();
connection.setDoOutput(true);
connection.setRequestProperty("Content-Type",
"form-data; boundary=" + boundary);
SplunkMgr.instance().addSplunkMessage("Calling PES Service with
userId = " + userId, LogLevel.INFO);
}
else{
try {
SplunkMgr.instance().addSplunkMessage("Could not get user context from logged in user " , LogLevel.INFO);
new MappingSysAdminServiceImpl().logout();
} catch (SAMException e) {
SplunkMgr.instance().addSplunkMessage("Logout Failed - Unexpected error when logging out. " + (e !=null ? e.getMessage() : e), LogLevel.ERROR);
}
}
if(autoMapper!=null)
// here header data setting
OutputStream output = connection.getOutputStream();
PrintWriter writer = new PrintWriter(new OutputStreamWriter(output, CHARSET), false);
// Add params
if (providerId != null && providerId.length() > 0) {
addParam(writer, boundary, PESConstants.PARAM_PROVIDER, providerId);
}
if (verbose) {
addParam(writer, boundary, PESConstants.PARAM_VERBOSE, "true");
}
if (password != null && password.length() > 0) {
addParam(writer, boundary, PESConstants.PARAM_PASSWORD, password);
}
// Send file
writer.append("--" + boundary).append(CRLF);
writer.append("Content-Disposition: multipart/form-data; name=\""+PESConstants.PARAM_PDF+"\"").append(CRLF);
writer.append("Content-Type: application/pdf").append(CRLF);
writer.append("Content-Transfer-Encoding: binary").append(CRLF);
writer.append(CRLF).flush();
output.write(pdfFile);
output.flush(); // Important before continuing with writer!
writer.append(CRLF).flush(); // CRLF is important! It indicates end of boundary.
// End of multipart/form-data.
writer.append("--" + boundary + "--").append(CRLF).flush();
// Read response
InputStream input = null;
Ваша помощь действительно поможет мне идти вперед ..
Примечание: Если я использую Springboot multipartЯ могу бежать без каких-либо препятствий и получить выходной.проблема в том, когда я нажимаю с клиента ...
Пожалуйста, предложите мне, какие изменения я должен сделать, чтобы я мог продолжить
В контроллере у меня есть @RequestParam, чтобы он не шел внутриЗатем контроллер понял, что клиент отправляет данные формы, поэтому я изменил значение @FormDataParam на jersy и получил MultiPart, но в нем ничего нет.
@ FormDataParam (PESConstants.PARAM_PDF) InputStream inputStream
Iне получил никакой ошибки, но: я получил значение NULL в объекте InputStream