如何在Java Rest模板客户端中修改Content-Disposition的一部分

我正在努力使用java spring创建对某些内部服务的有效请求。问题在于适当的有效载荷可用于多部分/表单数据边界。


环境:java服务器->(其余)http multipart / form-data->一些服务


(中间没有浏览器)


有效负载应如下所示:


------ WebKitFormBoundaryp8mrQWOb5GiyC90y

内容处置:表单数据;name =“文件”; filename =“ 0000.png”

内容类型:image / png


[二进制数据]


------ WebKitFormBoundaryp8mrQWOb5GiyC90y--

不幸的是,我无法更改此“标题”,并且得到了如下所示的信息:


 --fkGT7CJaQB9-2aa8G1ePv17iHKnWSsd

内容处置:表单数据;name =“文件”

内容长度:170096


[二进制数据]


--fkGT7CJaQB9-2aa8G1ePv17iHKnWSsd--


我搜索了许多stackoverlow问题,但似乎没有任何效果。这是我到目前为止所做的(在有效负载之上生成):


HashMap<String, List<String>> additionalHeaders = new HashMap<>();

String fileMd5 = "tgrlfG0pjblWZB6g1f7j5w=="; //@todo

File file = new File(systemFile.getAbsoluteFileLocation());

Path filePath = Paths.get(systemFile.getAbsoluteFileLocation());

try{

    DiskFileItem fileItem = new DiskFileItem("file", "image/png", false, file.getName(), (int) file.length() , file.getParentFile());

    InputStream input =  new FileInputStream(file);

    OutputStream os = fileItem.getOutputStream();

    int ret = input.read();

    while ( ret != -1 )

    {

        os.write(ret);

        ret = input.read();

    }

    os.flush();

    MultipartFile multipartFile = new CommonsMultipartFile(fileItem);



    MultiValueMap<String, Object> parts =

            new LinkedMultiValueMap<>();

    ByteArrayResource resource = new ByteArrayResource(multipartFile.getBytes());

    parts.add("files", resource);



    additionalHeaders.put("Content-MD5", Collections.singletonList(fileMd5));

    additionalHeaders.put("Content-Disposition", Collections.singletonList("attachment; filename=\""+systemFile.getFilenameWithExtension()+"\""));

    ResponseEntity<FrpFileServer> responseEntity = formDataRestClient.post(this, parts, FrpFileServer.class, isServerSide, frpToken.getTokenId(), additionalHeaders, MediaType.MULTIPART_FORM_DATA);

    return responseEntity.getBody();

} catch (IOException e) {

    return null;

}

formDataRestClient通过RestTemplate构建其余的请求



万千封印
浏览 408回答 2
2回答

侃侃无极

好的,我已经解决了用以下替换资源创建的问题:ByteArrayResource resource = new ByteArrayResource(multipartFile.getBytes()){&nbsp; &nbsp; @Override&nbsp; &nbsp; public String getFilename() {&nbsp; &nbsp; &nbsp; &nbsp; return systemFile.getFilenameWithExtension();&nbsp; &nbsp; }};由于这一点,restTemplate以正确的方式处理了它的魔力:)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java