вызывая SpringPot Multipart API от сервлета - PullRequest
0 голосов
/ 23 сентября 2019

Я разработал 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, если кто-то работал раньше .. Изменения в контроллере покоя или в сервлете тоже хорошо.

Заранее всем спасибо..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...