如何使用 Spring REST multipart 分块发送大文件(REST 客户端) [英] How to send large file using Spring REST multipart in chunks (REST client)

查看:47
本文介绍了如何使用 Spring REST multipart 分块发送大文件(REST 客户端)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用 spring REST 编写一个将文件上传到数据库的客户端.以下是我无法更改的服务器端控制器代码:

I am using spring REST to write a client which will upload a file to DB. Following is the server side controller code which I can not change :

@RequestMapping(method = RequestMethod.POST)
public ResponseEntity<UploadResponseDto> uploadFile(@RequestParam("file") MultipartFile file) throws IOException {

    String contentType =  file.getContentType();
    if ( contentType == null || !contentType.equalsIgnoreCase(APPLICATION_OCTET_STREAM)) {
        contentType = APPLICATION_OCTET_STREAM;
    }
    GridFSFile gridFSFile = gridFsTemplate.store(file.getInputStream(), file.getOriginalFilename(), contentType);

    MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
    String fileLocation = linkTo(FileAttachmentController.class).slash(gridFSFile.getId()).toUri().toString();
    headers.add(LOCATION, fileLocation);
    UploadResponseDto uploadResponseDto = new UploadResponseDto(file.getOriginalFilename(), fileLocation);
    return new ResponseEntity<>(uploadResponseDto, headers, HttpStatus.CREATED);
}

我发送文件的客户端代码是:

And my client side code for sending file is :

SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
    factory.setBufferRequestBody(false);
    RestTemplate restTemplate = new RestTemplate(factory);

    HttpHeaders headers = new HttpHeaders();
    headers.set(HttpHeaders.AUTHORIZATION, "Bearer " + token);
    headers.set("Accept", "application/json");
    headers.setContentType(MediaType.MULTIPART_FORM_DATA);

    File file = new File(fileToUpload);
    MultiValueMap<String, Object> data = new LinkedMultiValueMap<String, Object>();
    ByteArrayResource resource = new ByteArrayResource(
        Files.readAllBytes(Paths.get(fileToUpload))) {
        @Override
        public String getFilename() {
            return file.getName();
        }
    };
    data.add("file", resource);
    HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<MultiValueMap<String, Object>>(
        data, headers);
    ResponseEntity<Map> apiResponse = null;

    apiResponse = restTemplate.exchange(
        "http://{end_point_url}",
        HttpMethod.POST, requestEntity, Map.class);

但是当我使用此代码发送 50 MB 文件时,它会抛出413 请求实体太大错误"

But when I use this code to send lets say 50 MB file, it throws "413 Request entity too large error"

有人可以帮助我了解如何分块发送大文件吗?

Can somebody please help me out on how to send a large file in chunks?

谢谢&问候,维卡斯·吉特

Thanks & Regards, Vikas Gite

推荐答案

您可以使用

org.springframework.web.multipart.commons.CommonsMultipartResolver

@Bean(name = "multipartResolver")
public CommonsMultipartResolver multipartResolver() {
    CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
    multipartResolver.setMaxUploadSize(54525952); //...specify your size of file  (20971520 - 20 MB) (54525952 - 52 MB)
    return multipartResolver;
}

这篇关于如何使用 Spring REST multipart 分块发送大文件(REST 客户端)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆