当前位置: 首页 > news >正文

Wps开放平台v5升级v7上传实体文件踩坑(Java使用restTemplate)

背景: 最近接到一个老项目需求,之前开发的WPS开放平台文件(商密集成)预览功能因为升级需要重新对接api,新的上传文件接口踩坑特意记录一下。

在这里插入图片描述
这里出问题的是第二步,请求文件上传信息
在这里插入图片描述
踩坑代码 调用后403 postman粘贴请求头和地址发起模拟调用成功

private String upload(StoreRequest storeRequest, File file) throws IOException, URISyntaxException {URI url = new URIBuilder(storeRequest.getUrl()).build();HttpHeaders headers = new HttpHeaders();List<Header> storeRequestHeaders = storeRequest.getHeaders();storeRequestHeaders.forEach(header -> headers.add(header.getName(), header.getValue()));byte[] fileBytes = Files.readAllBytes(file.toPath());HttpEntity<byte[]> requestEntity = new HttpEntity<>(fileBytes, headers);return restTemplate.postForObject(url,requestEntity, String.class).getBody();}

修改后:

private String upload(StoreRequest storeRequest, File file) throws IOException,  NoSuchAlgorithmException, KeyStoreException, KeyManagementException {// 1. 读取文件为字节数组byte[] fileBytes = Files.readAllBytes(file.toPath());// 2. 创建信任所有证书的 HttpClientSSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, (chain, authType) -> true).build();try (CloseableHttpClient httpClient = HttpClients.custom().setSSLContext(sslContext).setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE).build()) {// 3. 创建 POST 请求HttpPost httpPost = new HttpPost(storeRequest.getUrl());// 4. 设置 Headers(保持原始 Content-Type)List<Header> storeRequestHeaders = storeRequest.getHeaders();storeRequestHeaders.forEach(header ->httpPost.addHeader(header.getName(), header.getValue()));// 5. 设置请求体(二进制数据)ByteArrayEntity requestEntity = new ByteArrayEntity(fileBytes);httpPost.setEntity(requestEntity);// 6. 执行请求并获取响应HttpResponse response = httpClient.execute(httpPost);org.apache.http.Header[] headers = response.getHeaders("X-Wps3-Info-Token");// 7. 返回响应头中的 Tokenreturn headers[0].getValue();}}
问题原因

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
使用RestTemplate会自动根据上传二进制文件自动响应Content-Type为application/octet-stream
后与wps开发确认,此处的确是传空字符串。
在这里插入图片描述

http://www.lryc.cn/news/578877.html

相关文章:

  • 基于开源链动2+1模式AI智能名片S2B2C商城小程序的场景零售创新研究
  • Mac电脑 卸载工具 App Cleaner
  • Java 大视界 -- Java 大数据在智能医疗健康管理中的慢性病风险预测与个性化干预(330)
  • 带GPU启动 Docker 容器
  • FAISS 简介及其与 GPT 的对接(RAG)
  • [CS创世SD NAND征文] 精准控制的坚固基石:CS创世SD NAND在华大HC32F4A0运动控制卡中的高可靠应用
  • 7月2日星期三今日早报简报微语报早读
  • Java AQS(AbstractQueuedSynchronizer)详解
  • 【前端】基础 - HTML基础标签和样式设置
  • Baumer工业相机堡盟工业相机如何实现高精度的硬件同步触发
  • 公用LCU屏的功能、应用场景
  • 微信小程序使用wx.chooseImage上传图片时进行压缩,并添加时间水印
  • 微信小程序入门实例_____打造你的专属单词速记小程序
  • PH热榜 | 2025-07-02
  • zabbix批量生成监控项教程!
  • Benchmarking in Go
  • 利器:NPM和YARN及其他
  • SQL Server 再进阶:类型多样性分析与时间维度扩展(第三课)
  • 解锁医疗AI密码:医疗人工智能专业大学四年学习路径
  • android核心技术摘要
  • 数论基础知识和模板
  • 香港券商交易系统开发与解决方案全景报告:云原生、跨境协同与高性能架构的创新实践
  • 【unitrix】 4.13 类型级加一计算(add1.rs)
  • 【GHS】Green Hills软件MULTI-IDE的安装教程
  • 【AI落地应用实战】AIGC赋能职场PPT汇报:从效率工具到辅助优化
  • Javaee 多线程 --进程和线程之间的区别和联系
  • Hadoop集群启动 (ZooKeeper、HDFS、YARN、Hbase)
  • 【网络】Linux 内核优化实战 - net.core.netdev_budget_usecs
  • VSCode-Copilot的系统提示词
  • mac mini m4安装node.js@16以下版本方法