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实际上不支持多次注入相同的参
这里的问题是,在步骤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");
}