首页 > 解决方案 > 我们可以在 Spring Rest 模板中为 Multipart 文件上传设置自定义边界吗

问题描述

我想创建一个自定义边界来使用 Spring Rest 模板发送一些 json 数据和一些文件。我无法添加该自定义边界。我无法覆盖为边界值获取一些随机字符串的默认行为。下面是我的代码片段。有人可以建议如何获得自定义边界吗?

 HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.MULTIPART_MIXED);
    headers.set("boundary", "MyCustomboundary");
    headers.set("accepts", "multipart/mixed");


    MultiValueMap<String, Object> multipartRequest = new LinkedMultiValueMap<>();

'为 JSON 部分创建一个 HttpEntity'

    HttpHeaders jsonHeader = new HttpHeaders();
    jsonHeader.setContentType(MediaType.APPLICATION_JSON);
    jsonHeader.set( "Content-Disposition","form-data");
    jsonHeader.set("boundary", "MyCustomboundary");
    jsonHeader.set( "name","Metadata");

    ContentDisposition contentDisposition = ContentDisposition
            .builder("form-data")
            .name("file")
            .filename("FileName"))
            .build();

    JSONObject json = getJSONObject();
    HttpEntity<String> jsonHttpEntity = new HttpEntity<>(json.toString(), jsonHeader);

'为二进制部分创建一个 HttpEntity'

    HttpHeaders pictureHeader = new HttpHeaders();
    pictureHeader.set( "Content-Disposition","form-data");
    pictureHeader.set( "name","Content");
    pictureHeader.set("filename","FileNameTest");
    pictureHeader.set("Content-Type", "application/octet-stream");
    pictureHeader.set("boundary", "MyCustomboundary");

    HttpEntity<ByteArrayResource> picturePart = new HttpEntity<>(new ByteArrayResource(multipartFile.getBytes()), pictureHeader);

'将两个部分放在一个请求中'

    multipartRequest.add("myAwesomeJsonData", jsonHttpEntity);
    multipartRequest.add("file", picturePart);

    HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(multipartRequest, headers);


    ResponseEntity<String> response = restTemplate.exchange(
                                                    endPointURL,
                                                    HttpMethod.POST,
                                                    requestEntity,
                                                    String.class);

**OutPut 是这样的 **

--xASRP9GvA7MfYQqgq0eVyQ2s1HCwMxm

内容处置:表单数据内容类型:应用程序/json 边界:MyCustomboundary 名称:元数据内容长度:359

{"JSON 密钥":"值"} --xASRP9GvA7MfYQqgq0eVyQ2s1HCwMxm

内容处置:表单数据名称:内容文件名:output.pdf 内容类型:应用程序/八位字节流边界:MyCustomboundary 内容长度:4504

<-- 文件内容-->

--xASRP9GvA7MfYQqgq0eVyQ2s1HCwMxm--

**但我希望它是**

--我的自定义边界

内容处置:表单数据内容类型:应用程序/json 边界:MyCustomboundary 名称:元数据内容长度:359

{"JSON 键":"值"} --MyCustomboundary

内容处置:表单数据名称:内容文件名:output.pdf 内容类型:应用程序/八位字节流边界:MyCustomboundary 内容长度:4504

<-- 文件内容-->

--我的自定义边界--

“有人可以建议如何添加这个自定义边界吗?”

标签: springspring-bootmultipartform-dataresttemplatemultipart

解决方案


推荐阅读