如何使用rest api上传文件和json元数据

时间:2018-01-06 07:28:24

标签: file upload multipartform-data

我要求在服务器上上传xlsx文件以及一些json数据(两者都必须在一个请求中完成)。我能够使用multipart / form-data上传文件,但是当我尝试将JSON数据添加到同一个请求时,请求失败了 org.apache.commons.fileupload.FileUploadBase $ InvalidContentTypeException:请求没有包含multipart / form-data或multipart / mixed stream

异常。以下是我的代码。

客户端代码

var method = 'POST';
 $.ajax({
         type: method,
         url : "rest/file/upload",
         transformRequest: function () {
             var formData = new FormData();
             formData.append("model", JSON.stringify(jsonData));                        
             formData.append("file",document.getElementById("fileForm"));
             return formData;
            },
           enctype : 'multipart/form-data',
           processData : false,
           contentType : false,
           success: function (data) {},
              error: function (data) {}
         });

模型是JSON数据& file是要上传的xlsx文件。 服务器端代码

  @POST
        @Path("/upload")
        @Consumes(MediaType.MULTIPART_FORM_DATA)
        @Produces(MediaType.TEXT_PLAIN)
        public Response uploadResumableISOFile(@Context HttpServletRequest request, @Context UriInfo uri,
                @Context HttpHeaders headers, @Context HttpServletResponse response) throws IOException {
            ServletFileUpload uploader = null;
            try {
                DiskFileItemFactory fileFactory = new DiskFileItemFactory();
                uploader = new ServletFileUpload(fileFactory);
                List<FileItem> fileItemsList = uploader.parseRequest(request);
                Iterator<FileItem> fileItemsIterator = fileItemsList.iterator();
                while (fileItemsIterator.hasNext()) {
                    FileItem fileItem = fileItemsIterator.next();
                    File file = File.createTempFile("TEMP_", ".xlsx");
                    fileItem.write(file);
                    System.out.print("File " + fileItem.getName() + " uploaded successfully.");
                }
                System.out.println("File uploaded to successfully...");
                return Response.status(Response.Status.OK).build();
            } catch (Exception e) {
                System.out.println(e);
                return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity("Failed to upload file.").build();
            }
        }


Please let me know if something is missing.

0 个答案:

没有答案