介绍

最近项目需要将word文档上传到百度文库,所以去百度智能云上看了下API,发现居然没有,而且百度文库的文章在网上居然没多少人发教程。所以这个文章是发下如何将word上传到百度文库上,因为我经常去拷别人的代码所以特别能理解那种语言非常严谨的文章,有的看不懂,所以我直接大白话,通俗易懂的发下上传流程。

首先我们需要有百度文库-文档批量上传OPENAPI文档。

这个文档是网上下的,说实话在哪下的我也不知道,甚至百度文库官网我都没找到API文档地址,我是在百度文库文档里找到的。

介绍步骤

首先说下上传的分步流程

第一步先用文件MD5获取STS凭证信息

第二步将我们的文件通过STS凭证的方式调用BOS客户端上传到BOS

第三步再将文件MD5上传上去校验文件是否上传上BOS里然后决定是否上传到文库中

STS凭证内ak和sk是临时性的,这里如果你用过普通BOS对象存储会有印象,因为普通BOS上传方式需要的ak和sk是在你账户里固定的,而STS是每次获取临时的

官方链接 https://cloud.baidu.com/doc/BOS/s/Ojwvyrpgd

官方的word文档里第一步和第三步的调用方式都有,第二步需要去百度智能云的BOS对象存储的API里查看教程,可能现在还没懂,别着急,我这傻瓜式会一撸到底的。

开始前准备

maven引入百度智能云的SDK

pom.xml

        <!--百度云--><dependency><groupId>com.baidubce</groupId><artifactId>bce-java-sdk</artifactId><version>0.10.218</version><exclusions><exclusion><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId></exclusion><exclusion><groupId>ch.qos.logback</groupId><artifactId>logback-core</artifactId></exclusion><exclusion><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId></exclusion></exclusions></dependency>

这里面我排除了百度自带的logback和slf4j组件,因为我用的log4j,这非常坑,他俩直接冲突了所以把百度的排除了

第一步

官方文档

这里面讲解一下参数

请求用的

appkey: 百度文库你建立账号获得的

uidStr:也是账号获得的

这俩没啥可说的,你有百度文库的店铺,就有这俩参数

sourceFlag:这个是你文档的类型,关于传什么word文档附录里有说明,下面到时候我会粘上去

类似这个类型

md5sum:文件的md5签名,这个非常重要,他是校验你文件唯一性的,后续会需要他对比你文件是否上传到BOS上去

这4个参数可以看出来,前3个没得说,第4个需要文件去处理成MD5,所以这里面直接放代码

    // file获取MD5private String fileMD5(File file) {try (FileInputStream fileInputStream = new FileInputStream(file)) {MessageDigest MD5 = MessageDigest.getInstance("MD5");byte[] buffer = new byte[8192];int length;while ((length = fileInputStream.read(buffer)) != -1) {MD5.update(buffer, 0, length);}return new String(Hex.encodeHex(MD5.digest()));} catch (Exception e) {e.printStackTrace();return null;}}
    /*** @author: XXX* @createDate: 2022/08/04* @description: 获取文档上传token接口*/private void getuploadtoken(String name) {File file = new File("E:\\JianBao\\downloadPath\\" + name);String md5 = fileMD5(file);JSONObject jsonObject = new JSONObject();jsonObject.put("appkey", "你的账户的");jsonObject.put("uidStr", "你的账户的");// 1是免费文档jsonObject.put("sourceFlag", "1");jsonObject.put("md5sum", md5);String result = HttpUtils.postJson("https://wenku.baidu.com/doc/openapi/getuploadtoken", jsonObject);System.out.println(result);BaiduUpload(file, result, name);}

这里面Flie自己获取你自己的,MD5直接方法获取,参数上面有说明,POST调用方式网上工具类随便一大堆,实在懒得弄用我的也行

package com.cei.utils;import com.alibaba.fastjson.JSONObject;import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.Map;public class HttpUtils {/*** 发送POST请求** @param url        目的地址* @param jsonObject 请求参数,Map类型。* @return 远程响应结果*/public static String postJson(String url, JSONObject jsonObject) {StringBuilder result = new StringBuilder();// 返回的结果BufferedReader in = null;// 读取响应输入流PrintWriter out = null;String params = "";// 编码之后的参数try {URL connURL = new URL(url);HttpURLConnection httpConn = (HttpURLConnection) connURL.openConnection();httpConn.setRequestProperty("Content-Type", "application/json;charset=utf-8");httpConn.setDoInput(true);httpConn.setDoOutput(true);out = new PrintWriter(httpConn.getOutputStream());out.write(jsonObject.toJSONString());out.flush();in = new BufferedReader(new InputStreamReader(httpConn.getInputStream(), StandardCharsets.UTF_8));String line;// 读取返回的内容while ((line = in.readLine()) != null) {result.append(line);}} catch (Exception e) {e.printStackTrace();} finally {try {if (out != null) {out.close();}if (in != null) {in.close();}} catch (IOException ex) {ex.printStackTrace();}}return result.toString();}
}

接口调通后

返回的参数

ak:临时的ak

sk:临时的sk

sessionkey:临时的sessionkey

key:就是BOS的objectKey(见下图)

bucket:bucketName(见下图)

第二步

我们已经获取STS的凭证了,可以考虑通过凭证上传的BOS了,那么官方文档来了

可以看到word文档偷懒了,让我们直接去看BOS的文档,那么我们只好去看BOS的了

这里首先给普及下BOS是如何上传的,避免看不懂代码,普通的BOS是通过你账号的ak和sk去建立BOS客户端对象(建造对象你引入的依赖包里有现成的直接调),然后通过客户端对象去调用你要上传的上传方法。(依赖包里也有)。这里分享一个其他网友自己封装的BOSUtil,非常好用https://blog.csdn.net/weixin_39843677/article/details/114844422

他写的这个工具我试过,直接就能传更简单了,当然他这个是普通上传BOS,跟我们要说的凭证上传不一样所以他的Util你还用不了,只是先分享下免得以后用的到

这是官方的示例代码,教你如何去获取STS凭证并且建立BOS客户端对象,由于我们文库已经返回STS信息了,所以这段代码我们不需要看前半段,只需要看后半段怎么建立的client

    /*** @author: XXX* @createDate: 2022/08/03* @description: 上传文件到百度BOS*/private void BaiduUpload(File file, String json, String name) {JSONObject jsonObject = JSON.parseObject(json);JSONObject jsonObject1 = jsonObject.getJSONObject("data");String ak = jsonObject1.getString("ak");String sk = jsonObject1.getString("sk");String sessionkey = jsonObject1.getString("sessionkey");String key = jsonObject1.getString("key");String bucket = jsonObject1.getString("bucket");BceCredentials bosstsCredentials = new DefaultBceSessionCredentials(ak, sk, sessionkey);// build bos clientBosClientConfiguration config = new BosClientConfiguration();config.setCredentials(bosstsCredentials);config.setEndpoint("bj.bcebos.com");BosClient bosClient = new BosClient(config);PutObjectResponse putObjectResponse = BosUtils.uploadFileToBos(bosClient, file, bucket, key);addpublicdoc(file);System.out.println(putObjectResponse.getETag());}

这个方法接着我第一步的方法,参数file没得说,你上传肯定传file啊,json就是上个步骤返回的参数,name是我自己的业务,因为代码我还没按照我们业务改完所以name你可以删了

这个方法最好改下,因为我没做参数的非空判断,因为我也是不久前测通

BosUtils就是上面发的那个别人写的工具,自己去粘下就好了

第三步

再来文档

这里面参数跟第一个差不多,无非就是多了addDocInfo,这个对象是配置你文库里文档显示的参数

    /*** @author: XXX* @createDate: 2022/08/04* @description: 新增文档提交接口*/private void addpublicdoc(File file) {String md5 = fileMD5(file);JSONObject jsonObject = new JSONObject();jsonObject.put("appkey", "你的");jsonObject.put("uidStr", "你的");jsonObject.put("sourceFlag", "1");jsonObject.put("md5sum", md5);JSONObject jsonObject2 = new JSONObject();jsonObject2.put("title", "测试标题1111");jsonObject2.put("fileExt", "docx");jsonObject2.put("totalSize", file.length());jsonObject2.put("payPrice", "");jsonObject2.put("freePage", "");jsonObject2.put("oriDocId", "");jsonObject.put("addDocInfo", jsonObject2);String result = HttpUtils.postJson("https://wenku.baidu.com/doc/openapi/addpublicdoc", jsonObject);System.out.println(result);}

调用成功后会返回个docId,这个ID就是你文库里这个文件的ID,非常有用记得存储,如果文档需要用接口更新需要用到这个docId的。

结果

如果你以上按照我的步骤上传,最后在你文库的后台会显示到你的测试文件

附录

更新接口文档

更新接口我们写,反正也不难

注意

我所贴的代码只能保证你上传上百度文库,并不能保证过程报错,因为我也是今天刚刚测通怕明天忘了。代码有些参数非空判断了,post别人链接了都得做异常处理,所以酌情自己修改

SpringBoot实现百度文库文档上传,通俗易懂适合萌新相关推荐

  1. SpringBoot+Vue+OpenOffice实现文档管理(文档上传、下载、在线预览)

    场景 SpringBoot集成OpenOffice实现doc文档转html: SpringBoot集成OpenOffice实现doc文档转html_BADAO_LIUMANG_QIZHI的博客-CSD ...

  2. 文秀才文档管理系统文档管理,CAD, 图纸管理, 百度文库, 文档在线预览

    原文来自 http://www.fanganwang.com/Product-detail-item-1440.html,欢迎转载. 关键字:文档管理,CAD, 图纸管理, 百度文库, 文档在线预览 ...

  3. 百度文库文档(文字和图片)

    百度文库文档(文字和图片) 背景 思路 预览效果 代码 代码解析 改进方向 参考资料 免责申明 背景 我想很多人会有与我一样的经历,想复制百度文库的内容却发现要开会员,天下苦百度文库久矣,本是广大网友 ...

  4. wps如何把文档上传到云服务器,WPS上传技巧:WPS怎么上传文件到云文档

    摘要 腾兴网为您分享:WPS上传技巧:WPS怎么上传文件到云文档,作业盒子,粤警民通,一直播,一起发等软件知识,以及悦考,手机虚拟机,党务管理信息系统,闪炫,数据提取工具,深度终端,爱酷学习网,首汽 ...

  5. Office文档上传后实时转换为PDF格式_图片文件上传后实时裁剪_实现在线预览Office文档

    Office文档上传后实时转换为PDF格式_图片文件上传后实时裁剪 前置条件 安装LibreOffice 安装OpenOffice 安装Unoconv 安装ImageMagick.x86_64 安装G ...

  6. quill光标位置插入html,quill编辑器+word文档上传,插入指定位置

    官方quill没有直接给出插入html的方式 类似,下面两个方法,是quill框架提供的,但是并没有提供可以在指定光标位置插入html quill.pasteHTML:这个方法已经废弃了,但目前还是可 ...

  7. 文档上传下载 php开源,PHP文件的上传下载 - PHP开发学习门户的个人空间 - OSCHINA - 中文开源技术交流社区...

    (1).在标签中将enctype和method两个属性指明相应的值. Enctype="multipart/form-data"; Method="POST" ...

  8. vue - element <upload> 组件批量上传文档,可携带其他表单数据项一同与文件 “手动提交“ 服务器(类似百度文库系统批量上传前端界面与逻辑)超详细教程示例源码,提供界面与逻辑完整源码

    效果图 本示例使用的是 element 组件库,其实什么组件库都行(逻辑是一样),只要你是 vue.js 项目就能使用本教程. 本文实现了 vue + element 使用 upload 组件批量上传 ...

  9. Java实现仿百度文库文档在线阅读

    为了实现这个功能,我们需要用到如下软件,Java+FlexPaper+SwfTool+OpenOffice这四大件. 1.思路 我们将doc.ppt等文档格式通过openoffice转换成pdf的格式 ...

最新文章

  1. 计算机二级ms office excel,计算机二级Msoffice考试excel答案.docx
  2. redistemplate分布式锁实现_基于 Redis SETNX 实现分布式锁
  3. 3月上旬中国域名解析服务商TOP10 DNSPOD升至8.24%
  4. C2872 “ACCESS_MASK”: 不明确的符号
  5. rand函数的使用方法php,PHP array_rand()函数 使用基础教程
  6. 【好文收藏】k8s中Pod 无法正常解析域名:部署 DNS 调试工具排查
  7. Win32程序中使用Combo box控件
  8. EF5.x Code First 一对多关联条件查询,Contains,Any,All
  9. 步进电机编写单4拍或4-8拍方式的汇编或c语言控制程序.,基于SCM和PLC的两种步进电机控制方法...
  10. stl vector 函数_vector :: front()函数以及C ++ STL中的示例
  11. [译] 移动应用设计新趋势
  12. 福禄克网络VERSIV(威测)电缆认证系统实现ROI更大化
  13. html网页设计的难点,在做设计与制作网页中主要难点是什么?
  14. 怪叔叔 一路走好 下辈子我们再一起玩KOF
  15. [TcaplusDB|黎明觉醒] 一路相伴,不负期待
  16. ArcEngine实现动态加载地图
  17. 百度地图缩放级别与比例尺的关系
  18. [转]数据挖掘十大经典算法
  19. 9款好用的bi数据可视化工具
  20. 读稻盛和夫《活法》-现代人的修行之路

热门文章

  1. SHEN ZHEN归来!
  2. 小米生态链的战投启示
  3. 货币竞争,不是货币战争
  4. 阿里云DNS服务器免费版和付费版列表
  5. Spring 教程01
  6. IObit Uninstaller pro:完全卸载程序,自动清除残余及注册表
  7. 研究Win32 GUI中SetActiveWindow与SetFocus和窗口消息
  8. 以下是两段c语言代码函数arith,计算机组成习题答案(清华大学).docx
  9. SQLsever数据库实例是啥子
  10. 绝对的开怀大笑-轻松一下