[英]File Upload Java Spring
我正在尝试以Java块形式上传文件。
我的块上传功能:
@Async
private Future<String> sendChunk(byte[] chunk, int start, int end, int numberOfChunks, String name, String sessionId) throws IOException {
LinkedMultiValueMap<String, Object> requestParams = new LinkedMultiValueMap<>();
requestParams.add("data", new String(java.util.Base64.getEncoder().encode(chunk), "UTF-8"));
requestParams.add("start", start);
requestParams.add("end", end);
requestParams.add("numberOfChunks", numberOfChunks);
requestParams.add("fileName", name);
requestParams.add("session", sessionId);
HttpEntity<LinkedMultiValueMap<String, Object>> requestEntity = new HttpEntity<>(requestParams);
UploadResponse uploadResponse = restTemplate.exchange(fileServiceUrl, HttpMethod.POST, requestEntity, new ParameterizedTypeReference<UploadResponse>(){}).getBody();
return new AsyncResult<>(uploadResponse.getSessionId());
}
这是File-Service-API的样子:
@RequestMapping(value = "/simpleUploader", method = RequestMethod.POST, produces = "application/json")
public ResponseEntity<UploadResponse> simpleUploader(
@RequestParam("data") String data,
@RequestParam("session") String sessionId,
@RequestParam("start") int start,
@RequestParam("end") int end,
@RequestParam("numberOfChunks") int numberOfChunks,
@RequestParam("fileName") String fileName) throws IOException {
....
}
现在,如果我尝试上传块,则File-Service将以400 - Bad Request
响应。
堆栈跟踪:
org.springframework.web.client.HttpClientErrorException:org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:667)处的org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:91)为null在org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:620)在org.springframework.web.client.RestTemplate.execute(RestTemplate.java:580)在org.springframework.web.client.RestTemplate.exchange (RestTemplate.java:526)
即使在到达API函数之前,它将被Spring拒绝。
我已经以相同的方式上传,但是使用Javascript。 通过Javascript,一切都可以正常运行。
我想念什么?
我的代码唯一的问题是,当我第一次调用File-Service API时,“ sessionId”将为null
。
当我将Map Entry的值设置为null时,不会传递整个Entry。 我不知道。
我的解决方法是向@RequestParam("session") String sessionId
添加defaultValue
,以便方法声明如下所示:
@RequestMapping(value = "/simpleUploader", method = RequestMethod.POST, produces = "application/json")
public ResponseEntity<UploadResponse> simpleUploader(
...
@RequestParam(value = "session", defaultValue = "") String sessionId,
... ) throws IOException {
....
}
@Async有两个限制。
http://www.baeldung.com/spring-async
尝试将private
改为public
@Async public Future<String> sendChunk(byte[] chunk, int start, int end, int numberOfChunks, String name, String sessionId) throws IOException {
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.