如何使用REST将二进制文件从JQuery Client发布到Java Server

我正试图从我的客户端(jQuery)发布一个二进制文件到我的服务器(Java)。 我正在使用Apache CXF和REST。 该文件正在向服务器发送,该服务器会立即抛出exception。

这是客户端的JavaScript:

function handleFileUpload() { console.log("handleFileUpload called"); var url = "http://myserver:8181/bootstrap/rest/upload/license"; var file = $('#file_upload').get(0).files[0]; $.ajax({ url: url, type: "post", data: file, processData: false, success: function(){ $("#file_upload_result").html('submitted successfully'); }, error:function(){ $("#file_upload_result").html('there was an error while submitting'); } }); } 

这是服务器端代码:

 @POST @Consumes(MediaType.MULTIPART_FORM_DATA) @Produces(MediaType.TEXT_PLAIN) @Path("/license") public String uploadLicenseFile(@FormParam("file") InputStream pdfStream) { try { //byte[] pdfByteArray = convertInputStreamToByteArrary(pdfStream); //fileLength = pdfByteArray.length; fileLength = pdfStream.available(); response = "Upload successful!"; // TODO read file and store params in memory } catch (Exception ex) { response = "Upload failed: " + ex.getMessage(); fileLength = 0; } return getFileLength(); } 

您将文件作为post正文发送,您要做的是在多部分表单数据体中发送文件。 您可以使用FormData对象执行此操作。

  function handleFileUpload() { console.log("handleFileUpload called"); var url = "http://myserver:8181/bootstrap/rest/upload/license"; var file = $('#file_upload').get(0).files[0]; var formData = new FormData(); formData.append('file', file) $.ajax({ url: url, type: "post", data: formData, processData: false, contentType: false, success: function(){ $("#file_upload_result").html('submitted successfully'); }, error:function(){ $("#file_upload_result").html('there was an error while submitting'); } }); } 

这是我与Musa的客户端解决方案一起使用的服务器端代码。

 @POST @Consumes(MediaType.MULTIPART_FORM_DATA) @Path("/license") public void uploadLicenseFile(MultipartBody body) { try { List all = body.getAllAttachments(); Attachment a = all.get(0); InputStream is = a.getDataHandler().getInputStream(); //byte[] pdfByteArray = convertInputStreamToByteArrary(pdfStream); //fileLength = pdfByteArray.length; fileLength = is.available(); response = "Upload successful!"; // TODO read file and store params in memory } catch (Exception ex) { response = "Upload failed: " + ex.getMessage(); fileLength = 0; } }