# weboffice-provider-v3-java **Repository Path**: tc10/weboffice-provider-v3-java ## Basic Information - **Project Name**: weboffice-provider-v3-java - **Description**: WPS WebOffice Provider V3 对接用 SDK。 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: https://solution.wps.cn - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 12 - **Created**: 2025-08-12 - **Last Updated**: 2025-08-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # [WebOffice 开放平台](https://solution.wps.cn) Java SDK ## 使用 在 pom.xml 中添加依赖: ~~~ cn.wps.solution weboffice-provider-v3 0.0.1 system ${project.basedir}/lib/weboffice-provider-v3-0.0.1.jar ~~~ **致歉**: WebOffice 的 SDK 项目目前还没有注册到 Maven Central。只能暂时通过将其添加到自建的 Maven 仓库中,或者像示例中这样,直接使用打包后的 jar 文件。 在项目中配置 `Spring` 发现依赖的项目下的 `Bean`,例如: ~~~java @SpringBootApplication(scanBasePackages = {"cn.wps.solution.weboffice.provider.v3", "your.project.class.path"}) public class Application implements ApplicationRunner { ... } ~~~ ## 依赖 - JDK 8+ - Spring Framework 4.0+ ## 主要结构及说明 ~~~ ├── java │   └── cn │   └── wps │   └── solution │   └── weboffice │   └── provider │   └── v3 │   ├── controller # 接口层 │   │   ├── ExtendCapacityController.java │   │   ├── FileStorageController.java │   │   ├── PreviewController.java │   │   ├── ProviderBaseController.java │   │   ├── ProviderJsonApi.java │   │   └── UserController.java │   ├── exception # 异常定义 │   │   ├── CustomError.java │   │   ├── FileNameConflict.java │   │   ├── FileNotExist.java │   │   ├── FileUploadNotComplete.java │   │   ├── FileVersionNotExist.java │   │   ├── InternalError.java │   │   ├── InvalidArgument.java │   │   ├── InvalidToken.java │   │   ├── NotImplementException.java │   │   ├── PermissionDenied.java │   │   ├── ProviderException.java │   │   ├── StorageNoSpace.java │   │   └── UserNotExist.java │   ├── model # 值对象,包括请求参数、返回值等 │   │   ├── DigestType.java │   │   ├── DownloadInfo.java │   │   ├── FileInfo.java │   │   ├── FileRenameRequest.java │   │   ├── FileUploadMultiPhase.java │   │   ├── FileUploadSinglePhase.java │   │   ├── LocalDateTimeDeserializer.java │   │   ├── LocalDateTimeSerializer.java │   │   ├── ProviderRequestAttribute.java │   │   ├── ProviderResponseEntity.java │   │   ├── UserInfo.java │   │   ├── UserPermission.java │   │   └── Watermark.java │   └── service # 需要接入方实现的接口 │   ├── ExtendCapacityService.java # 扩展能力接口,包括历史版本、重命名等功能 │   ├── MultiPhaseFileStorageService.java # 文档三阶段保存接口,非必须,且与 SinglePhaseFileStorageService 互斥,实现一个即可 │   ├── PreviewService.java # 预览服务接口,必须实现,包括获取文档信息、下载地址、当前用户权限接口 │   ├── SinglePhaseFileStorageService.java # 文档保存接口,非必须,且与 MultiPhaseFileStorageService 互斥,实现一个即可 │   └── UserService.java # 获取用户信息,非必须 ~~~ ### 文档预览接口 (必须) 如果仅使用开放平台提供的文档预览服务,可以只实现 `PreviewService` 接口,该接口是必须实现的,示例代码如下: ~~~java @Service public class PreviewServiceImpl implements PreviewService { @Override public FileInfo fetchFileInfo(String fileId) { return fetchFile(fileId).toFileInfo(); } @Override public DownloadInfo fetchDownloadInfo(String fileId) { return fetchFileDownloadInfo(fileId); } @Override public UserPermission fetchUserPermission(String fileId) { return fetchFileUserPermission(fileId); } } ~~~ ### 文档保存接口 (可选) 如果要使用开发平台提供的文档编辑能力,需要近一步实现文档保存接口,`MultiPhaseFileStorageService` 或 `SinglePhaseFileStorageService` 这两个接口只需要实现一个即可,同时在开放平台配置您实现的是哪个接口 * `MultiPhaseFileStorageService` 接口,其中包括如下三个步骤,该方式适用于文件元信息和文档内容是分开存储的,比如文档内容保存在某个云服务商,上传文件内容的流量直接走云服务商 1. [准备阶段](https://solution.wps.cn/docs/callback/save.html#%E5%87%86%E5%A4%87%E4%B8%8A%E4%BC%A0%E9%98%B6%E6%AE%B5) 2. [获取上传地址](https://solution.wps.cn/docs/callback/save.html#%E5%87%86%E5%A4%87%E4%B8%8A%E4%BC%A0%E9%98%B6%E6%AE%B5) 3. [上传结果通知](https://solution.wps.cn/docs/callback/save.html#%E4%B8%8A%E4%BC%A0%E5%AE%8C%E6%88%90%E5%90%8E-%E5%9B%9E%E8%B0%83%E9%80%9A%E7%9F%A5%E4%B8%8A%E4%BC%A0%E7%BB%93%E6%9E%9C) * `SinglePhaseFileStorageService` 接口,将三阶段上传中的参数,通过一个 Form 提交到接入方的服务端,包括文件的元信息和文档内容 `MultiPhaseFileStorageService` 实现示例: ~~~java @Service public class MultiPhaseFileStorageServiceImpl implements MultiPhaseFileStorageService { // 准备阶段,获取校验文档内容的校验合计算方法,非必须,默认 SHA1 @Override public List uploadPrepare(String s) { return Collections.singletonList(DigestType.SHA1); } // 获取上传地址,需要实现 @Override public FileUploadMultiPhase.FileUploadAddress.Response uploadAddress(FileUploadMultiPhase.FileUploadAddress.Request request) { return fetchUploadAddress(request.getFileId()); } // 通知上传结果 @Override public FileInfo uploadComplete(FileUploadMultiPhase.FileUploadComplete.Request request) { maybeNeedLock(); checkFileUploadComplete(request); return fetchFile(request.getRequest().getFileId()); } } ~~~ `SinglePhaseFileStorageService` 实现示例: ~~~java @Service public class SinglePhaseFileStorageServiceImpl implements SinglePhaseFileStorageService { @Override @SneakyThrows public FileInfo uploadFile(FileUploadSinglePhase.Request request) { saveFileMeta(request); saveFileContent(request); return fetchFile(request.getFileId()); } } ~~~ ### 用户接口 (可选) 如果要显示当前用户信息(当前参与文档协作的用户等场景),需要实现 `UserService` 接口,示例代码如下: ~~~java @Service public class UserServiceImpl implements UserService { @Override public List fetchUsers(List userIds) { return fetchUserList(userIds); } } ~~~ ### 扩展能力接口 (可选) 如果想使用更多开放平台提供的能力,需要选择性的实现 `ExtendCapacityService` 中的接口 接口定义中有默认实现(`default` 实现),方便接入方选择只实现其中的一部分功能,例如: ~~~java public interface ExtendCapacityService { // 要使用文档重命名功能,需要实现该接口 default void renameFile(String fileId, String name) { throw new NotImplementException(); } // 如果要实现文档历史版本列表功能,要实现该接口 default List fileVersions(String fileId, int offset, int limit) { throw new NotImplementException(); } // 如果要实现预览文档历史版本 default FileInfo fileVersion(String fileId, int version) { throw new NotImplementException(); } // 如果要实现预览文档历史版本,同上 default DownloadInfo fileVersionDownload(String fileId, int version) { throw new NotImplementException(); } // 如果要在文档预览/编辑的时候显示水印,需要实现该接口 default Watermark fileWatermark(String fileId) { throw new NotImplementException(); } } ~~~ ## 更多 关于回调接口的更多说明,请参考[WebOffice开放平台-WebOffice回调配置](https://solution.wps.cn/docs/callback/summary.html)。 [这里](https://gitee.com/wpsweboffice/weboffice-provider-demo-java) 这里有一个完整的 Demo 项目,供参考。