Java 使用spring MultipartFile将文件上载到Jersey web服务

Java 使用spring MultipartFile将文件上载到Jersey web服务,java,spring,rest,jersey,multipartform-data,Java,Spring,Rest,Jersey,Multipartform Data,我在服务器上上传文件的过程分为三步: 使用EXT.JS表单,我将一个文件上传到一个控制器 在控制器中,该方法获取MultipartFile,使用rest模板构建rest调用并将其发送到服务器 在服务器上,指定的方法应该接收多部分数据并处理文件 下面是步骤2中从UI端(EXT.JS)获取文件的方法: 这里的问题是,在步骤3,在上面的方法中,fileDetail对象只包含空值。。。我如何将步骤2(spring框架)的方法调整为步骤3(jersey)的方法。我想jersey实际上不支持多次注入相同的参

我在服务器上上传文件的过程分为三步:

  • 使用EXT.JS表单,我将一个文件上传到一个控制器
  • 在控制器中,该方法获取MultipartFile,使用rest模板构建rest调用并将其发送到服务器
  • 在服务器上,指定的方法应该接收多部分数据并处理文件
  • 下面是步骤2中从UI端(EXT.JS)获取文件的方法:


    这里的问题是,在步骤3,在上面的方法中,fileDetail对象只包含空值。。。我如何将步骤2(spring框架)的方法调整为步骤3(jersey)的方法。

    我想jersey实际上不支持多次注入相同的参数(因为在您的示例中似乎有非null InputStream,或者至少我可以推断出这一点)。尝试改用
    FormDataBodyPart
    。这样,您既可以查询文件内容配置,也可以通过
    part.getValueAs(InputStream.class)
    和访问InputStream。Spring示例具有
    文件路径
    参数名,而Jersey示例具有
    文件
    。这和什么有关系吗?好的,我将尝试spring方法中的FormDataBodyPart解决方案,在向jersey Parta发出请求之前,我将添加一个名为file的参数,我现在明白了。我以为他们在处理同一个请求。我认为在这种情况下,您无论如何都不会有内容配置,因为您发送的所有内容都是bytearray。您是否尝试将
    多部分文件作为一个整体发送?当我直接传递多部分文件时,出现WriteJson异常,请求无法发送
    
    @RequestMapping("/customerUploadFile/upload")
    @ResponseBody
    public JsonResponse uploadFile(CustomerUploadBean bean,
            @RequestParam("filePath") MultipartFile filePath) throws IOException {
    
    
    
        long fileSize = filePath.getSize();
    
        HttpEntity<CustomerUploadBean> httpEntity = getHttpEntity(bean);
        byte[] byteArr = filePath.getBytes();
    
        MultiValueMap<String, Object> parameters = new LinkedMultiValueMap<String, Object>();
    
        parameters.add("userId", httpEntity.getHeaders().get("userId"));
        parameters.add("file", byteArr);
    
        // to set content type of header
        org.springframework.http.HttpHeaders headers = new org.springframework.http.HttpHeaders();
        headers.setContentType(MediaType.MULTIPART_FORM_DATA);
    
        RestTemplate restTemplate = new RestTemplate();
        ResponseEntity<JsonResponse> jsonResponse = restTemplate.exchange(uri, HttpMethod.POST,
                new HttpEntity<MultiValueMap<String, Object>>(parameters, headers),
                new ParameterizedTypeReference<JsonResponse>() {
                });
    
        JsonResponse response = jsonResponse.getBody();
        if (jsonResponse.getStatusCode() == HttpStatus.OK) {
            response.setSuccess(true);
    
        } else {
            response.setSuccess(false);
        }
        return response;
    }
    
    public Response importUserProfileCSV(
            @ApiParam(value = "Service Name", required = true) @PathParam("service") String service,
            @ApiParam(value = "CSV file to upload.", required = true) @FormDataParam("file") InputStream uploadedInputStream,
            @ApiParam(value = "CSV file detail", required = true) @FormDataParam("file") FormDataContentDisposition fileDetail) {
    
        return delegate.importUserProfileCSV(uploadedInputStream, fileDetail,
                service, "user");
    
    }