Я разработал rest API в springboot, который принимает файл pdf и обрабатывает его, что прекрасно работает, когда я проверяю его почтальоном, загружающим файл pfd ...
вот как я написал ...
@RestController
@RequestMapping("/v2")
public class PDFExtractController {
private static final long serialVersionUID = 1L;
private static Logger log = Logger.getLogger(PDFExtractController.class);
@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){
ResponseData responseData=null;
//here some validation specific code.....
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);
}
return ResponseEntity.status(responseData.getResponseCode()) .body(responseData.getContent());
//code for ** processing the file here
}
}
Я хотел вызвать его с клиента, но это сервлет. Я не очень хорош в работе с сервлетом, даже не знаю, как установить значения в сервлете так,что он может поразить API с помощью PDF-файла и обработать ... любое тело, разработанное до сих пор, пожалуйста, помогите.
У меня есть код ниже, чтобы проверить, но он даже не достигает API.это говорит о плохой просьбе.
private static void addParam(PrintWriter writer, String boundary, String name, String value) {
writer.append("--" + boundary).append(CRLF);
writer.append("Content-Disposition: multipart/form-data; name=\""+name+"\"").append(CRLF);
writer.append("Content-Type: text/plain; charset=" + CHARSET).append(CRLF);
writer.append(CRLF).append(value).append(CRLF).flush();
}
String boundary = Long.toHexString(System.currentTimeMillis());
String url = pesServer + PESConstants.URL_DOCUMENT + "/" + docSubType.getApi();
System.out.println("url = "+url);
String userAuthorizationHeader = null;
HttpURLConnection connection = (HttpURLConnection)new URL(url).openConnection();
connection.setDoOutput(true);
connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
connection.setRequestProperty(PESConstants.HEADER_AUTO_MAPPER, autoMapper);
connection.setRequestProperty(PESConstants.HEADER_OFFERING_ID, PropertiesUtil.getAppId());
connection.setRequestProperty(PESConstants.HEADER_TRANSACTION_ID, tid);
connection.setRequestProperty(PESConstants.HEADER_APP_ID, PropertiesUtil.getAppId());
connection.setRequestProperty(PESConstants.HEADER_TEST, Tester.isEmpty(test) ? "null" : test);
OutputStream output = connection.getOutputStream();
PrintWriter writer = new PrintWriter(new OutputStreamWriter(output, CHARSET), false);
// Add params
if (providerId != null && providerId.length() > 0) {
addParam(writer, boundary, provider, providerId);
}
if (verbose) {
addParam(writer, boundary, verbous, "true");
}
if (password != null && password.length() > 0) {
addParam(writer, boundary, pass, 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("Content-Transfer-Encoding: multipart/form-data").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();
Пожалуйста, помогите мне вызвать API, если кто-то работал раньше .. Изменения в контроллере покоя или в сервлете тоже хорошо.
Заранее всем спасибо..