簡體   English   中英

文件上傳Java Spring

[英]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有兩個限制。

  • 它必須僅應用於公共方法。
  • 自我調用–從同一類中調用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM