Estoy trabajando en la carga de un archivo jsp usando una llamada ajax y puedo presionar el controlador java en HttpServletRequest. Veo el archivo de varias partes recibido, pero cuando hago request.getInputStream.readAllBytes() , obtengo una matriz de bytes vacía.
La llamada ajax en javascript
function saveFileUpload() { var data = new FormData() data.append("file", document.getElementById(fileName).files[0]) $.ajax({ type: 'POST', data: data, url: pageContext + "/upload", processData: false, contentType: false, success: function(data) {}, error: function(e) {} }); } }En el controlador Java
@RequestMapping(value = {"/upload"}, method = RequestMethod.POST) public void fileUpload ( HttpServletRequest request, HttpServletResponse response){ byte[] arr = request.getInputStream().readAllBytes(); System.out.println(arr.length); } El código anterior imprime arr.length como 0. ¿Puede alguien decirme el motivo de este problema?
Supongo que está utilizando Springboot y su aplicación es compatible con multipart/form-data . Después de la versión 3.0 , la API de Servlet lo admite de forma nativa.
@RequestMapping(value = "/upload", method = RequestMethod.POST) public void fileUpload(@RequestParam("file") MultipartFile file) throws IOException { if (!file.isEmpty()) { byte[] bytes = file.getBytes(); // and so on } }Ajax de JQuery:
function saveFileUpload() { let data = new FormData() data.append("file", document.getElementById(fileName).files[0]) $.ajax({ type: 'POST', data: data, url: pageContext + "/upload", processData: false, contentType: false, success: function(data) {}, error: function(e) {} }); }