为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

万千封印 2021-04-09 22:58:48
我正在努力使用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=="; //@todoFile 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构建其余的请求
查看完整描述

2 回答

?
侃侃无极

TA贡献2051条经验 获得超10个赞

好的,我已经解决了用以下替换资源创建的问题:


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

    @Override

    public String getFilename() {

        return systemFile.getFilenameWithExtension();

    }

};

由于这一点,restTemplate以正确的方式处理了它的魔力:)


查看完整回答
反对 回复 2021-04-28
  • 2 回答
  • 0 关注
  • 356 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号