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

学做投资网站广东圆心科技网站开发建站教程详解

学做投资网站,广东圆心科技网站开发建站教程详解,wordpress播放器mu38,电子商务网站建设指导思想1. 文档管理系统是什么 文档管理系统#xff08;DMS#xff1a;Document Management System#xff09;是一种软件系统#xff0c;用于组织、存储、检索和管理电子文档和文件。这些文件可以是各种格式的电子文档#xff0c;如文本文档、电子表格、图像、音频或视频文件等…1. 文档管理系统是什么 文档管理系统DMSDocument Management System是一种软件系统用于组织、存储、检索和管理电子文档和文件。这些文件可以是各种格式的电子文档如文本文档、电子表格、图像、音频或视频文件等。 DMS的主要功能通常包括 文档存储和组织DMS允许用户将文档上传到系统中并按照特定的分类或标签进行组织和存储使用户能够轻松找到所需的文件。版本控制DMS通常具有版本控制功能允许用户跟踪文档的不同版本并查看文档的修改历史。这对于团队协作和审查流程非常有用。访问控制DMS允许管理员设置不同用户或用户组的访问权限以确保只有授权的人员可以查看、编辑或删除特定文档。搜索和检索DMS通常具有强大的搜索功能允许用户根据关键字、日期、作者等条件快速检索所需的文档。工作流管理一些DMS还提供工作流功能允许用户定义和管理文档处理过程包括审批、审核和分发。安全性和备份DMS通常提供安全性功能如数据加密、安全审计和备份以确保文档的安全性和完整性。 总的来说文档管理系统帮助组织更有效地管理和利用其电子文档和文件提高工作效率减少错误并促进团队协作和知识共享。大家熟知的飞书文档、钉钉文档、企业微信文档、华为云文档等都属于DMS的范畴。 即使是不了解DMS的同学通过上面的介绍也可以感觉到DMS相对比较复杂和庞大因此完全0-1去建设一个DMS的话相关的工作量还是比较大的需要先搞定分布式存储、分布式文件系统、工作流等基础能力后才能将他们整合成为一个DMS因此选择开源DMS成为了一个捷径目前知名的基于Java的开源DMS有 Alfresco Alfresco是一种成熟的企业级DMS平台提供了丰富的功能包括文档管理、工作流、版本控制等。Alfresco Community Edition是其开源版本可以免费使用。Nuxeo Nuxeo是一个灵活的企业级内容管理平台提供了强大的文档管理和协作功能。Nuxeo Platform是其开源版本基于Java开发。Liferay PortalLiferay Portal是一个用于构建企业门户和社交协作平台的开源解决方案。它提供了文档管理、协作、工作流等功能并且是基于Java的。OpenKMOpenKM是一个功能强大的开源文档管理系统提供了文档存储、检索、版本控制等功能基于Java语言开发。 2. Nuxeo Vs Alfresco 选型对比 建议Nuxeo 和 Alfresco 在功能方面都提供了类似的核心文档管理和协作功能并且都是社区版开源免费以及都提供了较好的REST API但是从部署上来说Nuxeo更加迎合传统App建设现状同时Nuxeo在Github上热度及更新频度远高于Alfresco并且Nuxeo对于二开定制化更好SDK支持类型广二开遵循一切接插件的思想等而 Alfresco 则强调开箱即用如果优先考虑二开建议选择Nuxeo。 2.1 开源协议对比 两者都是社区版开源免费使用Apache 2.0 许可证允许用户自由使用、修改和分发企业版收费。 2.2 产品功能对比 Nuxeo 和 Alfresco 在功能方面都提供了类似的文档管理和协作功能。 2.3 Github项目热度对比 Nuxeo热度及最近更新时间都优 Alfresco https://github.com/AlfrescoArchive/alfresco-repository 99 stars、66 watching、96 forks、update: 4 years agoNuxeo https://github.com/nuxeo/nuxeo 604 stars、102 watching、374 forks、update: 4 months ago 2.4 API 及文档支持对比 两者在REST API方面都很强大可以满足大多数内容管理需求。Nuxeo 的 REST API 更加注重简单和直接而 Alfresco 的 REST API 功能覆盖全面并且有CMIS标准的支持。 Alfresco 文档地址https://docs.alfresco.com/ CMIS 标准提供了一个通用的API使得不同的内容管理系统能够互操作和数据交换解决了系统间的兼容性问题。–对于我们可能意义不大目前没有对接多个DMS系统的需求Nuxeo 文档地址https://doc.nuxeo.com/ Nuxeo Automation API 是Nuxeo平台提供的一个高级API旨在简化复杂的业务逻辑和工作流操作。它允许开发者通过预定义的操作Operations和链Chains来自动化各种内容管理任务。通过Nuxeo的Automation API可以用简单的配置文件来定义和执行这些步骤而不需要编写复杂的代码。 --有一定意义 2.5 SDK 对比 Nuxeo 和 Alfresco 在使用文档和技术支持方面表现基本相当并且都没有提官方中文文档。 Alfresco Java没有看到官网上有其他类型的SDK搜索JavaScript SDK 也搜不出东西Nuxeo JavaScript、Java、Python、.NET、PHP https://doc.nuxeo.com/nxdoc/client-sdks/ 2.6 性能对比 Nuxeo 和 Alfresco 在性能方面都做出了努力并且都提供了一系列性能优化和监控工具。 两者的架构设计都具有良好的可扩展性可以根据需求灵活扩展和部署。都支持横向扩容。 2.7 部署对比 2.7.1 数据库支持 Nuxeo 和 Alfresco 目前并未官方支持 TiDB但是都支持 PostgreSQL、MySQL等 2.7.2 文件存储支持 Nuxeo 和 Alfresco都使用数据库来存储文档内容和元数据也支持对接云存储如Amazon S3、Microsoft Azure Blob Storage、Google Cloud Storage 等但是都不支持阿里OSS。 2.7.3其他依赖中间件 核心功能都是基于 Java 编写的它通常作为一个独立的应用程序部署不需要额外的中间件都包含了内置的嵌入式 Web 容器。根据具体的部署需求都可能会依赖于其他一些组件。 Nuxeo 如 Elasticsearch用于全文搜索、Kafka用于异步处理、Redis用于缓存 Nuxeo 的工作流引擎是基于 Java 自研的该引擎是 Nuxeo 平台的一部分。Alfresco Solr用于全文搜索、Apache ActiveMQ用于消息队列、CIFS/SMB用于 Windows 文件共享等。 Alfresco内置工作流引擎如Activiti支持自定义业务流程。 2.8 定制和扩展对比Alfresco主打开箱即用、Nuxeo主打高扩展性 如果需要高度定制化、高扩展性并且有能力处理复杂的技术架构和二次开发Nuxeo 可能更适合你的需求。 如果需要快速部署、开箱即用、稳定成熟的功能和良好的技术支持尤其是有企业级支持需求Alfresco 可能是更好的选择。 2.9 其他 目前Nuxeo和Alfresco均不支持对文档特定部分进行注释如果将来要支持该功能一定涉及二开 3. Nuxeo API/SDK 调研 API 查看某个Nuxeo实例下所有 API 及 API Doc 方法 http://{serverRoot}/nuxeo/api/v1/automation/doc SDK 文档地址https://doc.nuxeo.com/client-java/3.14/ nuxeo-java-client 只能从Nuxeo的Maven仓库进行加载建议下载之后手工传到自己的私服仓库中maven依赖如下 dependencygroupIdorg.nuxeo.client/groupIdartifactIdnuxeo-java-client/artifactIdversion3.14.0/version /dependencyNuxeo的Maven仓库地址 repositoryidpublic-releases/idnamenuxeo/nameurlhttps://packages.nuxeo.com/repository/maven-public/url /repositoryNuxeo Java SDK 外部依赖较多测试是否少依赖可以运行以下代码确认 package com.beem.nuxeo.demo.sdk.test;import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.junit.MockitoJUnitRunner; import org.nuxeo.client.NuxeoClient; import org.nuxeo.client.objects.user.User;import static com.beem.nuxeo.demo.sdk.NuxeoConstant.*;/*** SdkBaseTest** author chenx*/ RunWith(MockitoJUnitRunner.class) public class SdkBaseTest {private NuxeoClient client;Beforepublic void before() {this.client new NuxeoClient.Builder().url(BASE_URL_NUXEO).authentication(USER_NAME_NUXEO_ADMIN, PASSWORD_NUXEO_ADMIN).schemas(*).connect();}Afterpublic void after() {this.client.disconnect();}Testpublic void baseTest() {User user this.client.getCurrentUser();System.out.println(user.getUserName());Assert.assertNotNull(user);} }3.1 API 鉴权 **建议开发过程中建议使用Nuxeo SDK这样默认使用OAuth方式鉴权特殊情况下可以自己写Http请求并使用基础鉴权方式。 3.1.1 Basic Authentication 在请求头中包含用户名和密码的Base64编码 3.1.2 OAuth 2.0 1、注册客户端首先在Nuxeo管理界面注册一个OAuth客户端应用获取客户端ID和客户端密钥。 2、获取授权码引导用户访问授权URL获取授权码。 3、交换访问令牌使用授权码换取访问令牌。 4、使用访问令牌在API请求中使用访问令牌。 3.1.3 Session Authentication 首先通过登录接口获取会话然后在随后的请求中包含会话ID。 3.1.4 API Key Nuxeo允许为用户创建API密钥这些密钥可以用于鉴权。 3.1.5 自定义插件鉴权 开发一个 Nuxeo 插件以支持基于手机短信验证码的认证方式。该插件可以与您的用户体系进行集成验证用户的身份。 3.2 用户 3.2.1 创建用户 Http请求示例 POST /nuxeo/api/v1/user HTTP/1.1 Authorization: Basic QWRtaW5pc3RyYXRvcjpBZG1pbmlzdHJhdG9y User-Agent: okhttp/3.14.4 NuxeoJavaClient/3.14.0 Content-Type: application/json; charsetUTF-8 Content-Length: 320 Host: 172.30.1.176:8080 Connection: Keep-Alive Accept-Encoding: gzip{id:null,properties:{password:password123,username:newuser3},extendedGroups:[],password:password123,firstName:null,company:null,groups:null,administrator:false,email:null,anonymous:false,lastName:null,entity-type:user,isAdministrator:false,isAnonymous:false,username:newuser3}HTTP/1.1 201 X-Frame-Options: SAMEORIGIN Referrer-Policy: strict-origin-when-cross-origin X-UA-Compatible: IE10; IE11 Cache-Control: no-cache X-Content-Type-Options: nosniff Content-Security-Policy: img-src data: blob: *; default-src blob: *; script-src unsafe-inline unsafe-eval data: *; style-src unsafe-inline *; font-src data: * X-XSS-Protection: 1; modeblock Content-Type: application/json; nuxeo-entityuser Transfer-Encoding: chunked Date: Thu, 23 May 2024 09:15:03 GMT Keep-Alive: timeout20 Connection: keep-alivee4 {entity-type:user,id:newuser3,properties:{firstName:null,lastName:null,tenantId:null,groups:[],company:null,email:null,username:newuser3},extendedGroups:[],isAdministrator:false,isAnonymous:false} 0JDK 示例 Test public void createUserTest() {User newUser new User();newUser.setUserName(newuser3);newUser.setPassword(password123);UserManager userManager this.client.userManager();User createdUser userManager.createUser(newUser);String userId createdUser.getId();System.out.println(User created successfully with ID: userId);Assert.assertTrue(true); }3.2.2 查找用户 Http请求示例 GET /nuxeo/api/v1/user/newuser2 HTTP/1.1 Authorization: Basic QWRtaW5pc3RyYXRvcjpBZG1pbmlzdHJhdG9y Content-Type: application/json; charsetUTF-8 User-Agent: okhttp/3.14.4 NuxeoJavaClient/3.14.0 Host: 172.30.1.176:8080 Connection: Keep-Alive Accept-Encoding: gzipHTTP/1.1 200 X-Frame-Options: SAMEORIGIN Referrer-Policy: strict-origin-when-cross-origin X-UA-Compatible: IE10; IE11 Cache-Control: no-cache X-Content-Type-Options: nosniff Content-Security-Policy: img-src data: blob: *; default-src blob: *; script-src unsafe-inline unsafe-eval data: *; style-src unsafe-inline *; font-src data: * X-XSS-Protection: 1; modeblock Content-Type: application/json; nuxeo-entityuser Transfer-Encoding: chunked Date: Thu, 23 May 2024 09:03:52 GMT Keep-Alive: timeout20 Connection: keep-alivee4 {entity-type:user,id:newuser2,properties:{firstName:null,lastName:null,tenantId:null,groups:[],company:null,email:null,username:newuser2},extendedGroups:[],isAdministrator:false,isAnonymous:false} 0JDK 示例 Test public void getUserTest() {String username newuser2;UserManager userManager this.client.userManager();// 如果找不到NuxeoClientRemoteException: HTTP/404: user does not existUser user userManager.fetchUser(username);System.out.println(User found with username: user.getUserName());Assert.assertTrue(true); }3.2.3 删除用户 Http请求示例 DELETE /nuxeo/api/v1/user/newuser1 HTTP/1.1 Authorization: Basic QWRtaW5pc3RyYXRvcjpBZG1pbmlzdHJhdG9y Content-Type: application/json; charsetUTF-8 User-Agent: okhttp/3.14.4 NuxeoJavaClient/3.14.0 Host: 172.30.1.176:8080 Connection: Keep-Alive Accept-Encoding: gzipHTTP/1.1 204 X-Frame-Options: SAMEORIGIN Referrer-Policy: strict-origin-when-cross-origin X-UA-Compatible: IE10; IE11 Cache-Control: no-cache X-Content-Type-Options: nosniff Content-Security-Policy: img-src data: blob: *; default-src blob: *; script-src unsafe-inline unsafe-eval data: *; style-src unsafe-inline *; font-src data: * X-XSS-Protection: 1; modeblock Content-Type: application/json Date: Tue, 28 May 2024 07:28:43 GMT Keep-Alive: timeout20 Connection: keep-aliveJDK 示例 Test public void deleteUserTest() {String username newuser1;UserManager userManager this.client.userManager();userManager.deleteUser(username);System.out.println(deleteUser with username: username);Assert.assertTrue(true); }3.3 组 在Nuxeo中通过将用户添加到组然后将权限分配给组可以简化权限管理同时一个用户可以加入多个不同的组。 在 Nuxeo 中可以分配的权限类型主要包括以下几种 Read允许用户查看文档但不能进行修改。Write允许用户修改文档但不能删除文档。Remove允许用户删除文档。ReadWrite允许用户查看和修改文档但不能删除文档。这实际上是将 Read 和 Write 权限组合在一起。Everything允许用户执行所有操作包括查看、修改、删除文档等。实际上这相当于管理员权限。Manage Everything允许用户管理所有内容和权限。这是最高权限通常分配给管理员角色。 3.3.1 创建组 Http请求示例 POST /nuxeo/api/v1/group HTTP/1.1 Authorization: Basic QWRtaW5pc3RyYXRvcjpBZG1pbmlzdHJhdG9y User-Agent: okhttp/3.14.4 NuxeoJavaClient/3.14.0 Content-Type: application/json; charsetUTF-8 Content-Length: 124 Host: 172.30.1.176:8080 Connection: Keep-Alive Accept-Encoding: gzip{memberUsers:null,memberGroups:null,parentGroups:null,entity-type:group,groupname:newGroup2,grouplabel:null}HTTP/1.1 201 X-Frame-Options: SAMEORIGIN Referrer-Policy: strict-origin-when-cross-origin X-UA-Compatible: IE10; IE11 Cache-Control: no-cache X-Content-Type-Options: nosniff Content-Security-Policy: img-src data: blob: *; default-src blob: *; script-src unsafe-inline unsafe-eval data: *; style-src unsafe-inline *; font-src data: * X-XSS-Protection: 1; modeblock Content-Type: application/json; nuxeo-entitygroup Transfer-Encoding: chunked Date: Thu, 23 May 2024 11:08:15 GMT Keep-Alive: timeout20 Connection: keep-aliveb5 {entity-type:group,groupname:newGroup2,grouplabel:newGroup2,id:newGroup2,properties:{tenantId:null,description:null,grouplabel:null,groupname:newGroup2}} 0JDK 示例 Test public void createGroupTest() {UserManager userManager this.client.userManager();Group newGroup new Group();newGroup.setGroupName(newGroup2);newGroup.setGroupLabel(测试组2);Group createdGroup userManager.createGroup(newGroup);System.out.println(Group created: createdGroup.getGroupName());Assert.assertTrue(true); }3.3.2 删除组 Http请求示例 DELETE /nuxeo/api/v1/group/newGroup1 HTTP/1.1 Authorization: Basic QWRtaW5pc3RyYXRvcjpBZG1pbmlzdHJhdG9y Content-Type: application/json; charsetUTF-8 User-Agent: okhttp/3.14.4 NuxeoJavaClient/3.14.0 Host: 172.30.1.176:8080 Connection: Keep-Alive Accept-Encoding: gzipHTTP/1.1 204 X-Frame-Options: SAMEORIGIN Referrer-Policy: strict-origin-when-cross-origin X-UA-Compatible: IE10; IE11 Cache-Control: no-cache X-Content-Type-Options: nosniff Content-Security-Policy: img-src data: blob: *; default-src blob: *; script-src unsafe-inline unsafe-eval data: *; style-src unsafe-inline *; font-src data: * X-XSS-Protection: 1; modeblock Date: Mon, 27 May 2024 03:21:10 GMT Keep-Alive: timeout20 Connection: keep-aliveJDK 示例 Test public void deleteGroupTest() {UserManager userManager this.client.userManager();String groupName newGroup1;userManager.deleteGroup(groupName);System.out.println(Group deleted: groupName);Assert.assertTrue(true); }3.3.3 查找组 Http请求示例 HTTP/1.1 200 X-Frame-Options: SAMEORIGIN Referrer-Policy: strict-origin-when-cross-origin X-UA-Compatible: IE10; IE11 Cache-Control: no-cache X-Content-Type-Options: nosniff Content-Security-Policy: img-src data: blob: *; default-src blob: *; script-src unsafe-inline unsafe-eval data: *; style-src unsafe-inline *; font-src data: * X-XSS-Protection: 1; modeblock Content-Type: application/json; nuxeo-entitygroup Transfer-Encoding: chunked Date: Mon, 27 May 2024 03:45:33 GMT Keep-Alive: timeout20 Connection: keep-alivebe {entity-type:group,groupname:newGroup3,grouplabel:.........3,id:newGroup3,properties:{tenantId:null,description:null,grouplabel:.........3,groupname:newGroup3}} 0JDK 示例 Test public void getGroupTest() {UserManager userManager this.client.userManager();String groupName newGroup3;// 如果找不到则获得异常NuxeoClientRemoteException: HTTP/404: group does not existGroup group userManager.fetchGroup(groupName);System.out.println(Group not found with groupName: group.getGroupName());Assert.assertTrue(true); }3.3.4 用户加入组 Http请求示例 POST /nuxeo/api/v1/user/newuser2/group/newGroup3 HTTP/1.1 Authorization: Basic QWRtaW5pc3RyYXRvcjpBZG1pbmlzdHJhdG9y Content-Type: application/json; charsetUTF-8 User-Agent: okhttp/3.14.4 NuxeoJavaClient/3.14.0 Content-Length: 0 Host: 172.30.1.176:8080 Connection: Keep-Alive Accept-Encoding: gzipHTTP/1.1 201 X-Frame-Options: SAMEORIGIN Referrer-Policy: strict-origin-when-cross-origin X-UA-Compatible: IE10; IE11 Cache-Control: no-cache X-Content-Type-Options: nosniff Content-Security-Policy: img-src data: blob: *; default-src blob: *; script-src unsafe-inline unsafe-eval data: *; style-src unsafe-inline *; font-src data: * X-XSS-Protection: 1; modeblock Content-Type: application/json; nuxeo-entityuser Transfer-Encoding: chunked Date: Mon, 27 May 2024 04:04:10 GMT Keep-Alive: timeout20 Connection: keep-alive130 {entity-type:user,id:newuser2,properties:{firstName:null,lastName:null,tenantId:null,groups:[newGroup3],company:null,email:null,username:newuser2},extendedGroups:[{name:newGroup3,label:.........3,url:group/newGroup3}],isAdministrator:false,isAnonymous:false} 0JDK 示例 Test public void userJoinGroupTest() {UserManager userManager this.client.userManager();String username newuser2;String groupName newGroup3;userManager.addUserToGroup(username, groupName);System.out.println(User added to group done, username username , groupName groupName);Assert.assertTrue(true); }3.3.5 用户退出组 看起来不支持官方用户和组的SDK介绍中只有 Delete APIs below are available to delete user/group: deleteUser which takes a user namedeleteGroup which takes a group name Let’s delete our entities: userManager.deleteUser(“john”); userManager.deleteGroup(“myGroup”); 间接方法修改群成员的的方式管理后台抓包如下 PUT /nuxeo/api/v1/group/newGroup3 HTTP/1.1 Host: 172.30.1.176:8080 Connection: keep-alive Content-Length: 225 accept: text/plain,application/json, application/json fetch-group: memberUsers,memberGroups properties: * User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Content-Type: application/json Origin: http://172.30.1.176:8080 Referer: http://172.30.1.176:8080/nuxeo/ui/ Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q0.9 Cookie: JSESSIONID73917BF4464AE2CF70CD8F75DC480671.nuxeo; org.jboss.seam.core.TimeZoneAsia/Shanghai; nuxeo.start.url.fragment!%2Fadmin%2Fuser-group-management%2Fgroup%2FnewGroup3{entity-type:group,groupname:newGroup3,grouplabel:.........3,id:newGroup3,properties:{tenantId:null,description:null,grouplabel:.........3,groupname:newGroup3},memberUsers:[],memberGroups:[]}HTTP/1.1 200 X-Frame-Options: SAMEORIGIN Referrer-Policy: strict-origin-when-cross-origin X-UA-Compatible: IE10; IE11 Cache-Control: no-cache X-Content-Type-Options: nosniff Content-Security-Policy: img-src data: blob: *; default-src blob: *; script-src unsafe-inline unsafe-eval data: *; style-src unsafe-inline *; font-src data: * X-XSS-Protection: 1; modeblock Content-Type: application/json; nuxeo-entitygroup Transfer-Encoding: chunked Date: Mon, 27 May 2024 06:42:05 GMT Keep-Alive: timeout20 Connection: keep-alivee1 {entity-type:group,groupname:newGroup3,grouplabel:.........3,id:newGroup3,properties:{tenantId:null,description:null,grouplabel:.........3,groupname:newGroup3},memberUsers:[],memberGroups:[]} 0借鉴管理后的思路通过修改人的组属性一样可以做到将用户移出组好处是一般来说人对应的组的数据量一般会少很多 Test public void removeUserFromGroupTest2() {String username newuser2;String groupName newGroup3;UserManager userManager this.client.userManager();User user userManager.fetchUser(username);ListString userGroupList user.getGroups();userGroupList.remove(groupName);user.setGroups(userGroupList);userManager.updateUser(user);System.out.println(Remove user from group done, username username , groupName groupName);Assert.assertTrue(true); }3.4 文件夹 Nuxeo中容器 1、Domain 是 Nuxeo 内容库中的顶级容器它是内容组织的最上层结构用于隔离不同的内容区或业务域。一个 Nuxeo 实例可以包含多个 domain每个 domain 都可以有自己的子结构和内容。但是用户User和组Group与 Domain 并不直接关联同时Domain的创建相对重一个Nuxeo中Domain的数量并没有上限但是Domain过多对于整个Nuxeo实例性能的影响建议实测。 2、Workspaces 是用来存储和管理文档的主要容器。workspaces 通常位于 domain 内部是组织和管理内容的中间层次同时可以从 domain 继承权限也可以设置自己的权限。 3、Directory 是用来存储和管理结构化数据的特殊容器。它们通常用于存储用户、组、词汇表、配置数据等。 备注 1、Workspaces 与 Directory 区别 可以把Workspaces 认为是特殊的Directory不过从Nuxeo的概念来说Workspaces 强调更多的协作相关能力包括工作流、文档变更事件通知等功能。不过根据具体需求仍然可以使用文件夹来实现类似的协作能力。 建议鉴于Domain的特殊性、可以把workspaces就认为是文件夹、目前对工作流等协作需求意愿不强因此建议全部使用文件夹来做文件容器。 3.4.1 创建文件夹 Http请求示例 POST /nuxeo/api/v1/path/default-domain/UserWorkspaces/Administrator HTTP/1.1 Authorization: Basic QWRtaW5pc3RyYXRvcjpBZG1pbmlzdHJhdG9y User-Agent: okhttp/3.14.4 NuxeoJavaClient/3.14.0 Content-Type: application/json; charsetUTF-8 Content-Length: 658 Host: 172.30.1.176:8080 Connection: Keep-Alive Accept-Encoding: gzip{path:null,type:Folder,state:null,lockOwner:null,lockCreated:null,versionLabel:null,isCheckedOut:null,lastModified:null,contextParameters:{},changeToken:null,facets:null,parentRef:null,uid:null,title:null,name:MyNewFolder2,retainUntil:null,versionableId:null,id:null,locked:false,proxy:false,version:false,underRetentionOrLegalHold:false,record:false,checkedOut:null,lock:null,trashed:false,entity-type:document,repository:null,properties:{dc:title:My New Folder2},isProxy:false,isTrashed:null,isRecord:false,hasLegalHold:false,isUnderRetentionOrLegalHold:false,isVersion:false}HTTP/1.1 201 X-Frame-Options: SAMEORIGIN Referrer-Policy: strict-origin-when-cross-origin X-UA-Compatible: IE10; IE11 Cache-Control: no-cache X-Content-Type-Options: nosniff Content-Security-Policy: img-src data: blob: *; default-src blob: *; script-src unsafe-inline unsafe-eval data: *; style-src unsafe-inline *; font-src data: * X-XSS-Protection: 1; modeblock Content-Type: application/json; nuxeo-entitydocument Transfer-Encoding: chunked Date: Tue, 28 May 2024 06:44:59 GMT Keep-Alive: timeout20 Connection: keep-alive28c {entity-type:document,repository:default,uid:8be3261e-f3c9-4c5f-b92b-63c032f64439,path:/default-domain/UserWorkspaces/Administrator/MyNewFolder2,type:Folder,state:project,parentRef:727303eb-42c6-4f39-bbb7-e8be8305f9a1,isCheckedOut:true,isRecord:false,retainUntil:null,hasLegalHold:false,isUnderRetentionOrLegalHold:false,isVersion:false,isProxy:false,changeToken:0-0,isTrashed:false,title:My New Folder2,lastModified:2024-05-28T06:44:59.770Z,facets:[Folderish,NXTag],schemas:[{name:common,prefix:common},{name:dublincore,prefix:dc},{name:facetedTag,prefix:nxtag}]} 0JDK 示例 Test public void createDirTest() {String personalWorkspacePath /default-domain/UserWorkspaces/ USER_NAME_NUXEO_ADMIN;// 如果路径错误或者不存在则404错误Document personalWorkspace this.client.repository().fetchDocumentByPath(personalWorkspacePath);// 如果文件夹重名仍然可以成功创建系统会自动构建唯一path路径Document newFolder Document.createWithName(MyNewFolder, Folder);newFolder.setPropertyValue(dc:title, My New Folder);Document createdFolder this.client.repository().createDocumentByPath(personalWorkspace.getPath(), newFolder);System.out.println(create dir done, path createdFolder.getPath());Assert.assertTrue(true); }备注 1、在指定路径下创建文件夹需要先判断父亲文件是否存在然后再判断新创建文件夹是否存在。使用Nuxeo SDK时如果新文件夹已经存在不会报错系统会创建同名的文件夹Nuxeo路径唯一即可当文件夹同名时系统会自动构造唯一的路径 3.4.2 获取文件夹 Http请求示例 GET /nuxeo/api/v1/path/default-domain/UserWorkspaces/Administrator/MyNewFolder HTTP/1.1 Authorization: Basic QWRtaW5pc3RyYXRvcjpBZG1pbmlzdHJhdG9y Content-Type: application/json; charsetUTF-8 User-Agent: okhttp/3.14.4 NuxeoJavaClient/3.14.0 Host: 172.30.1.176:8080 Connection: Keep-Alive Accept-Encoding: gzipHTTP/1.1 200 X-Frame-Options: SAMEORIGIN Referrer-Policy: strict-origin-when-cross-origin X-UA-Compatible: IE10; IE11 Cache-Control: no-cache X-Content-Type-Options: nosniff Content-Security-Policy: img-src data: blob: *; default-src blob: *; script-src unsafe-inline unsafe-eval data: *; style-src unsafe-inline *; font-src data: * X-XSS-Protection: 1; modeblock Content-Type: application/json; nuxeo-entitydocument Transfer-Encoding: chunked Date: Tue, 28 May 2024 06:42:27 GMT Keep-Alive: timeout20 Connection: keep-alive28a {entity-type:document,repository:default,uid:733d23ae-a6c3-4642-ba2b-357974b9f1a6,path:/default-domain/UserWorkspaces/Administrator/MyNewFolder,type:Folder,state:project,parentRef:727303eb-42c6-4f39-bbb7-e8be8305f9a1,isCheckedOut:true,isRecord:false,retainUntil:null,hasLegalHold:false,isUnderRetentionOrLegalHold:false,isVersion:false,isProxy:false,changeToken:0-0,isTrashed:false,title:My New Folder,lastModified:2024-05-28T02:45:39.603Z,facets:[Folderish,NXTag],schemas:[{name:common,prefix:common},{name:dublincore,prefix:dc},{name:facetedTag,prefix:nxtag}]} 0JDK 示例 public static Document getDocument(NuxeoClient client, String path) {if (StringUtils.isEmpty(path)) {throw new BeemRuntimeException(folderPath is empty!);}Document document null;try {document client.repository().fetchDocumentByPath(path);} catch (NuxeoClientException e) {// ignore NuxeoClientException}return document; }Test public void getDocumentTest() {String path /default-domain/UserWorkspaces/ USER_NAME_NUXEO_ADMIN /MyNewFolder;Document document NuxeoClientUtils.getDocument(this.client, path);if (Objects.nonNull(document)) {System.out.println(document existed, path: document.getPath() , type: document.getType());}Assert.assertTrue(true); }3.4.3 删除文件夹 注意文件夹被删除后文件夹中所有内容子文件夹、文件均会被删除。 Http请求示例 DELETE /nuxeo/api/v1/id/2674629b-34a5-4f25-bcde-1e6b587551f5 HTTP/1.1 Authorization: Basic QWRtaW5pc3RyYXRvcjpBZG1pbmlzdHJhdG9y Content-Type: application/json; charsetUTF-8 User-Agent: okhttp/3.14.4 NuxeoJavaClient/3.14.0 Host: 172.30.1.176:8080 Connection: Keep-Alive Accept-Encoding: gzipHTTP/1.1 204 X-Frame-Options: SAMEORIGIN Referrer-Policy: strict-origin-when-cross-origin X-UA-Compatible: IE10; IE11 Cache-Control: no-cache X-Content-Type-Options: nosniff Content-Security-Policy: img-src data: blob: *; default-src blob: *; script-src unsafe-inline unsafe-eval data: *; style-src unsafe-inline *; font-src data: * X-XSS-Protection: 1; modeblock Content-Type: application/json Date: Tue, 28 May 2024 07:10:42 GMT Keep-Alive: timeout20 Connection: keep-aliveJDK 示例 Test public void deleteDocumentTest() {String path NuxeoClientUtils.combinePath(NUXEO_PERSONAL_WORKSPACE_ROOT_PATH, NUXEO_USER_NAME_ADMIN, TestDir);Document doc this.client.repository().fetchDocumentByPath(path);if (Objects.isNull(doc)) {System.out.println(Document not existed, path path);}this.client.repository().deleteDocument(doc);System.out.println(Document deleted successfully: path);Assert.assertTrue(true); }3.4.4 List文件夹 Http请求示例 GET /nuxeo/api/v1/id/727303eb-42c6-4f39-bbb7-e8be8305f9a1/children HTTP/1.1 Authorization: Basic QWRtaW5pc3RyYXRvcjpBZG1pbmlzdHJhdG9y Content-Type: application/json; charsetUTF-8 User-Agent: okhttp/3.14.4 NuxeoJavaClient/3.14.0 Host: 172.30.1.176:8080 Connection: Keep-Alive Accept-Encoding: gzipHTTP/1.1 200 X-Frame-Options: SAMEORIGIN Referrer-Policy: strict-origin-when-cross-origin X-UA-Compatible: IE10; IE11 Cache-Control: no-cache X-Content-Type-Options: nosniff Content-Security-Policy: img-src data: blob: *; default-src blob: *; script-src unsafe-inline unsafe-eval data: *; style-src unsafe-inline *; font-src data: * X-XSS-Protection: 1; modeblock Content-Type: application/json; nuxeo-entitydocuments Transfer-Encoding: chunked Date: Tue, 28 May 2024 10:48:59 GMT Keep-Alive: timeout20 Connection: keep-alive{entity-type:documents,isPaginable:true,resultsCount:9,pageSize:50,maxPageSize:1000,resultsCountLimit:50,currentPageSize:9,currentPageIndex:0,currentPageOffset:0,numberOfPages:1,isPreviousPageAvailable:false,isNextPageAvailable:false,isLastPageAvailable:false,isSortable:true,hasError:false,errorMessage:null,totalSize:9,pageIndex:0,pageCount:1,entries:[{entity-type:document,repository:default,uid:23279f16-92a3-4bb5-8652-609d9a05855c,path:/default-domain/UserWorkspaces/Administrator/1111111,type:Note,state:project,parentRef:727303eb-42c6-4f39-bbb7-e8be8305f9a1,isCheckedOut:false,isRecord:false,retainUntil:null,hasLegalHold:false,isUnderRetentionOrLegalHold:false,isVersion:false,isProxy:false,changeToken:5-0,isTrashed:false,title:1111111,lastModified:2024-05-21T09:47:18.789Z,facets:[Versionable,NXTag,Publishable,Commentable,HasRelatedText],schemas:[{name:note,prefix:note},{name:uid,prefix:uid},{name:common,prefix:common},{name:files,prefix:files},{name:dublincore,prefix:dc},{name:relatedtext,prefix:relatedtext},{name:facetedTag,prefix:nxtag}]},{entity-type:document,repository:default,uid:3a0ab178-4ebd-483e-abfd-5ee905fcbe56,path:/default-domain/UserWorkspaces/Administrator/IM-SERVER...................docx,type:File,state:project,parentRef:727303eb-42c6-4f39-bbb7-e8be8305f9a1,isCheckedOut:true,isRecord:false,retainUntil:null,hasLegalHold:false,isUnderRetentionOrLegalHold:false,isVersion:false,isProxy:false,changeToken:2-0,isTrashed:false,title:IM-SERVER...................docx,lastModified:2024-05-23T01:59:51.835Z,facets:[Versionable,NXTag,Publishable,Commentable,HasRelatedText,Downloadable],schemas:[{name:uid,prefix:uid},{name:file,prefix:file},{name:common,prefix:common},{name:files,prefix:files},{name:dublincore,prefix:dc},{name:relatedtext,prefix:relatedtext},{name:facetedTag,prefix:nxtag}]},{entity-type:document,repository:default,uid:c29fe5bc-71f3-4827-857d-f4595983a467,path:/default-domain/UserWorkspaces/Administrator/Favorites,type:Favorites,state:project,parentRef:727303eb-42c6-4f39-bbb7-e8be8305f9a1,isCheckedOut:true,isRecord:false,retainUntil:null,hasLegalHold:false,isUnderRetentionOrLegalHold:false,isVersion:false,isProxy:false,changeToken:1-0,isTrashed:false,title:My Favorites,lastModified:2024-05-22T02:29:19.895Z,facets:[Collection,NotCollectionMember],schemas:[{name:common,prefix:common},{name:dublincore,prefix:dc},{name:collection,prefix:collection}]},{entity-type:document,repository:default,uid:03e238d5-5bf2-4f54-ae29-5394d2c32059,path:/default-domain/UserWorkspaces/Administrator/TestDir,type:Folder,state:project,parentRef:727303eb-42c6-4f39-bbb7-e8be8305f9a1,isCheckedOut:true,isRecord:false,retainUntil:null,hasLegalHold:false,isUnderRetentionOrLegalHold:false,isVersion:false,isProxy:false,changeToken:0-0,isTrashed:false,title:TestDir,lastModified:2024-05-28T08:20:02.569Z,facets:[Folderish,NXTag],schemas:[{name:common,prefix:common},{name:dublincore,prefix:dc},{name:facetedTag,prefix:nxtag}]},{entity-type:document,repository:default,uid:aa6f88d0-d296-4d5b-8e8f-2aa3d610f7ad,path:/default-domain/UserWorkspaces/Administrator/beem-ucloud-devtest.xls,type:File,state:project,parentRef:727303eb-42c6-4f39-bbb7-e8be8305f9a1,isCheckedOut:true,isRecord:false,retainUntil:null,hasLegalHold:false,isUnderRetentionOrLegalHold:false,isVersion:false,isProxy:false,changeToken:2-0,isTrashed:false,title:beem-ucloud-devtest.xls,lastModified:2024-05-23T02:23:37.449Z,facets:[Versionable,NXTag,Publishable,Commentable,HasRelatedText,Downloadable],schemas:[{name:uid,prefix:uid},{name:file,prefix:file},{name:common,prefix:common},{name:files,prefix:files},{name:dublincore,prefix:dc},{name:relatedtext,prefix:relatedtext},{name:facetedTag,prefix:nxtag}]},{entity-type:document,repository:default,uid:3bfd190c-759d-452a-b5ae-44c16a0e0a55,path:/default-domain/UserWorkspaces/Administrator/...2024................................................,type:File,state:project,parentRef:727303eb-42c6-4f39-bbb7-e8be8305f9a1,isCheckedOut:true,isRecord:false,retainUntil:null,hasLegalHold:false,isUnderRetentionOrLegalHold:false,isVersion:false,isProxy:false,changeToken:3-0,isTrashed:false,title:...2024................................................,lastModified:2024-05-21T08:27:11.171Z,facets:[Versionable,NXTag,Publishable,CollectionMember,Commentable,HasRelatedText,Downloadable],schemas:[{name:uid,prefix:uid},{name:file,prefix:file},{name:collectionMember,prefix:collectionMember},{name:common,prefix:common},{name:files,prefix:files},{name:dublincore,prefix:dc},{name:relatedtext,prefix:relatedtext},{name:facetedTag,prefix:nxtag}]},{entity-type:document,repository:default,uid:28756acf-1769-4021-a00e-745b017807e4,path:/default-domain/UserWorkspaces/Administrator/......MD,type:Note,state:project,parentRef:727303eb-42c6-4f39-bbb7-e8be8305f9a1,isCheckedOut:true,isRecord:false,retainUntil:null,hasLegalHold:false,isUnderRetentionOrLegalHold:false,isVersion:false,isProxy:false,changeToken:12-0,isTrashed:false,title:......MD,lastModified:2024-05-21T08:34:27.004Z,facets:[Versionable,NXTag,Notifiable,Publishable,Commentable,HasRelatedText],schemas:[{name:note,prefix:note},{name:uid,prefix:uid},{name:notification,prefix:notif},{name:common,prefix:common},{name:files,prefix:files},{name:dublincore,prefix:dc},{name:relatedtext,prefix:relatedtext},{name:facetedTag,prefix:nxtag}]},{entity-type:document,repository:default,uid:94206e69-bd3d-4577-8f7f-624c7241cc62,path:/default-domain/UserWorkspaces/Administrator/......................docx,type:File,state:project,parentRef:727303eb-42c6-4f39-bbb7-e8be8305f9a1,isCheckedOut:true,isRecord:false,retainUntil:null,hasLegalHold:false,isUnderRetentionOrLegalHold:false,isVersion:false,isProxy:false,changeToken:3-1,isTrashed:false,title:......................docx,lastModified:2024-05-28T08:59:39.039Z,facets:[Versionable,NXTag,Publishable,Commentable,HasRelatedText,Downloadable],schemas:[{name:uid,prefix:uid},{name:file,prefix:file},{name:common,prefix:common},{name:files,prefix:files},{name:dublincore,prefix:dc},{name:relatedtext,prefix:relatedtext},{name:facetedTag,prefix:nxtag}]},{entity-type:document,repository:default,uid:ddd65b53-eb35-434b-b222-bfd0f412ccd8,path:/default-domain/UserWorkspaces/Administrator/......................docx.1716886854562,type:File,state:project,parentRef:727303eb-42c6-4f39-bbb7-e8be8305f9a1,isCheckedOut:true,isRecord:false,retainUntil:null,hasLegalHold:false,isUnderRetentionOrLegalHold:false,isVersion:false,isProxy:false,changeToken:3-1,isTrashed:false,title:......................docx,lastModified:2024-05-28T09:00:54.594Z,facets:[Versionable,NXTag,Publishable,Commentable,HasRelatedText,Downloadable],schemas:[{name:uid,prefix:uid},{name:file,prefix:file},{name:common,prefix:common},{name:files,prefix:files},{name:dublincore,prefix:dc},{name:relatedtext,prefix:relatedtext},{name:facetedTag,prefix:nxtag}]}]}JDK 示例 Test public void listDirectoryTest() {String path NuxeoClientUtils.combinePath(NUXEO_PERSONAL_WORKSPACE_ROOT_PATH, NUXEO_USER_NAME_ADMIN);Repository repository this.client.repository();Document parentDoc repository.fetchDocumentByPath(path);Documents children repository.fetchChildrenById(parentDoc.getId());for (Document document : children.getDocuments()) {System.out.println(document.getPath());}Assert.assertTrue(true); }3.5 文件 3.5.1 文件上传 Http请求示例 POST /nuxeo/api/v1/upload HTTP/1.1 Authorization: Basic QWRtaW5pc3RyYXRvcjpBZG1pbmlzdHJhdG9y Content-Type: application/json; charsetUTF-8 User-Agent: okhttp/3.14.4 NuxeoJavaClient/3.14.0 Content-Length: 0 Host: 172.30.1.176:8080 Connection: Keep-Alive Accept-Encoding: gzipHTTP/1.1 201 X-Frame-Options: SAMEORIGIN Referrer-Policy: strict-origin-when-cross-origin X-UA-Compatible: IE10; IE11 Cache-Control: no-cache X-Content-Type-Options: nosniff Content-Security-Policy: img-src data: blob: *; default-src blob: *; script-src unsafe-inline unsafe-eval data: *; style-src unsafe-inline *; font-src data: * X-XSS-Protection: 1; modeblock Content-Type: application/json;charsetUTF-8 Content-Length: 58 Date: Tue, 28 May 2024 09:00:54 GMT Keep-Alive: timeout20 Connection: keep-alive{batchId:batchId-083abec1-8331-42e9-b0d2-c663c0543864}POST /nuxeo/api/v1/upload/batchId-083abec1-8331-42e9-b0d2-c663c0543864/1 HTTP/1.1 X-File-Name: %E8%B7%B3%E6%9D%BF%E6%9C%BA%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E.docx X-File-Size: 653399 X-File-Type: application/octet-stream X-Upload-Type: normal X-Upload-Chunk-Index: 0 X-Upload-Chunk-Count: 1 Authorization: Basic QWRtaW5pc3RyYXRvcjpBZG1pbmlzdHJhdG9y User-Agent: okhttp/3.14.4 NuxeoJavaClient/3.14.0 Content-Type: application/octet-stream Content-Length: 653399 Host: 172.30.1.176:8080 Connection: Keep-Alive Accept-Encoding: gzip........File-Content............HTTP/1.1 201 X-Frame-Options: SAMEORIGIN Referrer-Policy: strict-origin-when-cross-origin X-UA-Compatible: IE10; IE11 Cache-Control: no-cache X-Content-Type-Options: nosniff Content-Security-Policy: img-src data: blob: *; default-src blob: *; script-src unsafe-inline unsafe-eval data: *; style-src unsafe-inline *; font-src data: * X-XSS-Protection: 1; modeblock Content-Type: application/json;charsetUTF-8 Content-Length: 136 Date: Tue, 28 May 2024 09:00:54 GMT Keep-Alive: timeout20 Connection: keep-alive{uploaded:true,fileIdx:1,uploadType:normal,uploadedSize:653399,batchId:batchId-083abec1-8331-42e9-b0d2-c663c0543864}POST /nuxeo/api/v1/path/default-domain/UserWorkspaces/Administrator HTTP/1.1 Authorization: Basic QWRtaW5pc3RyYXRvcjpBZG1pbmlzdHJhdG9y User-Agent: okhttp/3.14.4 NuxeoJavaClient/3.14.0 Content-Type: application/json; charsetUTF-8 Content-Length: 682 Host: 172.30.1.176:8080 Connection: Keep-Alive Accept-Encoding: gzip{path:null,type:File,state:null,lockOwner:null,lockCreated:null,versionLabel:null,isCheckedOut:null,lastModified:null,contextParameters:{},changeToken:null,facets:null,parentRef:null,uid:null,title:null,name:......................docx,retainUntil:null,versionableId:null,id:null,locked:false,record:false,proxy:false,checkedOut:null,trashed:false,version:false,lock:null,underRetentionOrLegalHold:false,entity-type:document,repository:null,properties:{dc:title:......................docx},isProxy:false,isTrashed:null,isRecord:false,hasLegalHold:false,isUnderRetentionOrLegalHold:false,isVersion:false}HTTP/1.1 201 X-Frame-Options: SAMEORIGIN Referrer-Policy: strict-origin-when-cross-origin X-UA-Compatible: IE10; IE11 Cache-Control: no-cache X-Content-Type-Options: nosniff Content-Security-Policy: img-src data: blob: *; default-src blob: *; script-src unsafe-inline unsafe-eval data: *; style-src unsafe-inline *; font-src data: * X-XSS-Protection: 1; modeblock Content-Type: application/json; nuxeo-entitydocument Transfer-Encoding: chunked Date: Tue, 28 May 2024 09:00:54 GMT Keep-Alive: timeout20 Connection: keep-alive37e {entity-type:document,repository:default,uid:ddd65b53-eb35-434b-b222-bfd0f412ccd8,path:/default-domain/UserWorkspaces/Administrator/......................docx.1716886854562,type:File,state:project,parentRef:727303eb-42c6-4f39-bbb7-e8be8305f9a1,isCheckedOut:true,isRecord:false,retainUntil:null,hasLegalHold:false,isUnderRetentionOrLegalHold:false,isVersion:false,isProxy:false,changeToken:0-0,isTrashed:false,title:......................docx,lastModified:2024-05-28T09:00:54.562Z,facets:[Versionable,NXTag,Publishable,Commentable,HasRelatedText,Downloadable],schemas:[{name:uid,prefix:uid},{name:file,prefix:file},{name:common,prefix:common},{name:files,prefix:files},{name:dublincore,prefix:dc},{name:relatedtext,prefix:relatedtext},{name:facetedTag,prefix:nxtag}]} 0PUT /nuxeo/api/v1/repo/default/id/ddd65b53-eb35-434b-b222-bfd0f412ccd8 HTTP/1.1 Authorization: Basic QWRtaW5pc3RyYXRvcjpBZG1pbmlzdHJhdG9y User-Agent: okhttp/3.14.4 NuxeoJavaClient/3.14.0 Content-Type: application/json; charsetUTF-8 Content-Length: 1041 Host: 172.30.1.176:8080 Connection: Keep-Alive Accept-Encoding: gzip{path:/default-domain/UserWorkspaces/Administrator/......................docx.1716886854562,type:File,state:project,lockOwner:null,lockCreated:null,versionLabel:null,isCheckedOut:true,lastModified:2024-05-28T09:00:54.562Z,contextParameters:{},changeToken:0-0,facets:[Versionable,NXTag,Publishable,Commentable,HasRelatedText,Downloadable],parentRef:727303eb-42c6-4f39-bbb7-e8be8305f9a1,uid:ddd65b53-eb35-434b-b222-bfd0f412ccd8,title:......................docx,name:null,retainUntil:null,versionableId:null,id:ddd65b53-eb35-434b-b222-bfd0f412ccd8,locked:false,record:false,proxy:false,checkedOut:true,trashed:false,version:false,lock:null,underRetentionOrLegalHold:false,entity-type:document,repository:default,properties:{file:content:{upload-batch:batchId-083abec1-8331-42e9-b0d2-c663c0543864,upload-fileId:1}},isProxy:false,isTrashed:false,isRecord:false,hasLegalHold:false,isUnderRetentionOrLegalHold:false,isVersion:false}HTTP/1.1 200 X-Frame-Options: SAMEORIGIN Referrer-Policy: strict-origin-when-cross-origin X-UA-Compatible: IE10; IE11 Cache-Control: no-cache X-Content-Type-Options: nosniff Content-Security-Policy: img-src data: blob: *; default-src blob: *; script-src unsafe-inline unsafe-eval data: *; style-src unsafe-inline *; font-src data: * X-XSS-Protection: 1; modeblock Content-Type: application/json; nuxeo-entitydocument Transfer-Encoding: chunked Date: Tue, 28 May 2024 09:00:54 GMT Keep-Alive: timeout20 Connection: keep-alive3b0 {entity-type:document,repository:default,uid:ddd65b53-eb35-434b-b222-bfd0f412ccd8,path:/default-domain/UserWorkspaces/Administrator/......................docx.1716886854562,type:File,state:project,parentRef:727303eb-42c6-4f39-bbb7-e8be8305f9a1,isCheckedOut:true,isRecord:false,retainUntil:null,hasLegalHold:false,isUnderRetentionOrLegalHold:false,isVersion:false,isProxy:false,changeToken:1-1,isTrashed:false,title:......................docx,lastModified:2024-05-28T09:00:54.594Z,facets:[Versionable,NXTag,Publishable,Commentable,HasRelatedText,Thumbnail,Downloadable],schemas:[{name:uid,prefix:uid},{name:thumbnail,prefix:thumb},{name:file,prefix:file},{name:common,prefix:common},{name:files,prefix:files},{name:dublincore,prefix:dc},{name:relatedtext,prefix:relatedtext},{name:facetedTag,prefix:nxtag}]} 0JDK 示例 Testpublic void uploadTest() {Repository repository this.client.repository();File file new File(D:\\tmp\\跳板机使用说明.docx);Blob fileBlob new FileBlob(file);BatchUploadManager batchUploadManager this.client.batchUploadManager();BatchUpload batchUpload batchUploadManager.createBatch();// fileIdx: 用于标识上传批次中的文件索引如果要上传多个文件到同一个批次可以用不同的索引标识这些文件例如 1, 2等等。batchUpload batchUpload.upload(1, fileBlob);// 在指定路径下创建文档Document newDoc Document.createWithName(跳板机使用说明.docx, NuxeoDocumentType.FILE.getTypeName());newDoc.setPropertyValue(dc:title, 跳板机使用说明.docx);String parentPath NuxeoClientUtils.combinePath(NUXEO_PERSONAL_WORKSPACE_ROOT_PATH, NUXEO_USER_NAME_ADMIN);Document createdDocument repository.createDocumentByPath(parentPath, newDoc);// 附加上传的文件createdDocument.setPropertyValue(file:content, batchUpload.getBatchBlob());createdDocument createdDocument.updateDocument();System.out.println(File uploaded successfully with ID: createdDocument.getId());Assert.assertTrue(true);} }3.5.2 文件下载 Http请求示例 GET /nuxeo/api/v1/repo/default/id/3a0ab178-4ebd-483e-abfd-5ee905fcbe56/blob/file:content HTTP/1.1 Authorization: Basic QWRtaW5pc3RyYXRvcjpBZG1pbmlzdHJhdG9y Content-Type: application/json; charsetUTF-8 User-Agent: okhttp/3.14.4 NuxeoJavaClient/3.14.0 Host: 172.30.1.176:8080 Connection: Keep-Alive Accept-Encoding: gzipHTTP/1.1 200 X-Frame-Options: SAMEORIGIN Referrer-Policy: strict-origin-when-cross-origin X-UA-Compatible: IE10; IE11 Cache-Control: private, max-age0 X-Content-Type-Options: nosniff Content-Security-Policy: img-src data: blob: *; default-src blob: *; script-src unsafe-inline unsafe-eval data: *; style-src unsafe-inline *; font-src data: * X-XSS-Protection: 1; modeblock Expires: Wed, 29 May 2024 03:21:31 GMT Last-Modified: Thu, 23 May 2024 01:59:51 GMT ETag: 61c38817e626f38204f7d0cfebf2b2af Content-Disposition: attachment; filename*UTF-8IM-SERVER%E6%9C%8D%E5%8A%A1%E7%AB%AF%E5%8F%A3%E5%8D%A0%E7%94%A8.docx Accept-Ranges: bytes Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document Content-Length: 9174 Date: Wed, 29 May 2024 03:21:31 GMT Keep-Alive: timeout20 Connection: keep-alive...file-content....JDK 示例 Test public void downloadTest() throws IOException {String path NuxeoClientUtils.combinePath(NUXEO_PERSONAL_WORKSPACE_ROOT_PATH, NUXEO_USER_NAME_ADMIN);Repository repository this.client.repository();Document parentDoc repository.fetchDocumentByPath(path);Documents children repository.fetchChildrenById(parentDoc.getId());Document fileDoc null;for (Document document : children.getDocuments()) {NuxeoDocumentType documentType NuxeoDocumentType.getByName(document.getType());if (Objects.nonNull(documentType) documentType.isFile()) {fileDoc document;break;}}if (Objects.isNull(fileDoc)) {System.out.println(No file Document existed!);Assert.assertTrue(false);return;}System.out.println(Id: fileDoc.getId() , Type: fileDoc.getType());Blob blob fileDoc.streamBlob();File localFile new File(D:\\1.docx);if (localFile.exists()) {Files.delete(localFile.toPath());}try (InputStream inputStream blob.getStream();OutputStream outputStream new FileOutputStream(localFile)) {IOUtils.copy(inputStream, outputStream);System.out.println(File downloaded successfully!);} catch (Exception e) {e.printStackTrace();}System.out.println(File download successfully, fileLocalPath : localFile.getPath());Assert.assertTrue(true); }3.6 评论 Nuxeo SDK 好像不包含评论相关的封装后续需要自己使用httpClient进行相关接口调用的封装 3.6.1 新增评论 Http请求示例 POST /nuxeo/api/v1/id/ddd65b53-eb35-434b-b222-bfd0f412ccd8/comment/ HTTP/1.1 Host: 172.30.1.176:8080 Connection: keep-alive Content-Length: 90 accept: text/plain,application/json, application/json properties: * User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Content-Type: application/json Origin: http://172.30.1.176:8080 Referer: http://172.30.1.176:8080/nuxeo/ui/ Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q0.9 Cookie: JSESSIONID99F0E578A5198A92E7EA8BF84553FFAA.nuxeo; org.jboss.seam.core.TimeZoneAsia/Shanghai; nuxeo.start.url.fragment{entity-type:comment,parentId:ddd65b53-eb35-434b-b222-bfd0f412ccd8,text:33333}HTTP/1.1 201 X-Frame-Options: SAMEORIGIN Referrer-Policy: strict-origin-when-cross-origin X-UA-Compatible: IE10; IE11 Cache-Control: no-cache X-Content-Type-Options: nosniff Content-Security-Policy: img-src data: blob: *; default-src blob: *; script-src unsafe-inline unsafe-eval data: *; style-src unsafe-inline *; font-src data: * X-XSS-Protection: 1; modeblock Content-Type: application/json; nuxeo-entitycomment Transfer-Encoding: chunked Date: Wed, 29 May 2024 03:58:29 GMT Keep-Alive: timeout20 Connection: keep-alive33a {entity-type:comment,id:b9942bce-7d72-445a-847f-ab26368d1e8b,parentId:ddd65b53-eb35-434b-b222-bfd0f412ccd8,ancestorIds:[ddd65b53-eb35-434b-b222-bfd0f412ccd8],author:Administrator,text:33333,creationDate:2024-05-29T03:58:29.906Z,modificationDate:2024-05-29T03:58:29.906Z,entityId:null,origin:null,entity:null,permissions:[Write,WriteVersion,ReadProperties,ReadCanCollect,ReadSecurity,Remove,ReadVersion,Read,WriteLifeCycle,Everything,Moderate,Version,ManageLegalHold,MakeRecord,WriteColdStorage,ReadChildren,AddChildren,Comment,ReadLifeCycle,RemoveChildren,DataVisualization,ReviewParticipant,Unlock,CanAskForPublishing,RestrictedRead,ReadWrite,ReadRemove,Browse,SetRetention,WriteProperties,WriteSecurity,ManageWorkflows]} 0JDK 示例 N/A SDK不支持3.6.2 获取文档所有评论 Http请求示例 GET /nuxeo/api/v1/id/3a0ab178-4ebd-483e-abfd-5ee905fcbe56/comment/?pageSize10currentPageIndex0 HTTP/1.1 Host: 172.30.1.176:8080 Connection: keep-alive accept: text/plain,application/json, application/json fetch-comment: repliesSummary properties: * User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Content-Type: application/json Referer: http://172.30.1.176:8080/nuxeo/ui/ Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q0.9 Cookie: JSESSIONID99F0E578A5198A92E7EA8BF84553FFAA.nuxeo; org.jboss.seam.core.TimeZoneAsia/Shanghai; nuxeo.start.url.fragmentHTTP/1.1 200 X-Frame-Options: SAMEORIGIN Referrer-Policy: strict-origin-when-cross-origin X-UA-Compatible: IE10; IE11 Cache-Control: no-cache X-Content-Type-Options: nosniff Content-Security-Policy: img-src data: blob: *; default-src blob: *; script-src unsafe-inline unsafe-eval data: *; style-src unsafe-inline *; font-src data: * X-XSS-Protection: 1; modeblock Content-Type: application/json; nuxeo-entitycomments Transfer-Encoding: chunked Date: Wed, 29 May 2024 04:07:17 GMT Keep-Alive: timeout20 Connection: keep-alive6d0 {entity-type:comments,totalSize:2,entries:[{entity-type:comment,id:8f69b0d7-2fdd-46ed-9085-1e934f9677cb,parentId:3a0ab178-4ebd-483e-abfd-5ee905fcbe56,ancestorIds:[3a0ab178-4ebd-483e-abfd-5ee905fcbe56],author:Administrator,text:2222,creationDate:2024-05-29T04:02:05.211Z,modificationDate:2024-05-29T04:02:05.211Z,entityId:null,origin:null,entity:null,permissions:[Write,WriteVersion,ReadProperties,ReadCanCollect,ReadSecurity,Remove,ReadVersion,Read,WriteLifeCycle,Everything,Moderate,Version,ManageLegalHold,MakeRecord,WriteColdStorage,ReadChildren,AddChildren,Comment,ReadLifeCycle,RemoveChildren,DataVisualization,ReviewParticipant,Unlock,CanAskForPublishing,RestrictedRead,ReadWrite,ReadRemove,Browse,SetRetention,WriteProperties,WriteSecurity,ManageWorkflows],numberOfReplies:0},{entity-type:comment,id:6dbeb912-d06e-4230-bd8e-c1f1d91d85c4,parentId:3a0ab178-4ebd-483e-abfd-5ee905fcbe56,ancestorIds:[3a0ab178-4ebd-483e-abfd-5ee905fcbe56],author:Administrator,text:1111,creationDate:2024-05-29T04:02:02.833Z,modificationDate:2024-05-29T04:02:02.833Z,entityId:null,origin:null,entity:null,permissions:[Write,WriteVersion,ReadProperties,ReadCanCollect,ReadSecurity,Remove,ReadVersion,Read,WriteLifeCycle,Everything,Moderate,Version,ManageLegalHold,MakeRecord,WriteColdStorage,ReadChildren,AddChildren,Comment,ReadLifeCycle,RemoveChildren,DataVisualization,ReviewParticipant,Unlock,CanAskForPublishing,RestrictedRead,ReadWrite,ReadRemove,Browse,SetRetention,WriteProperties,WriteSecurity,ManageWorkflows],numberOfReplies:0}]} 0JDK 示例 N/A SDK不支持3.6.3 修改评论 Http请求示例 PUT /nuxeo/api/v1/id/3a0ab178-4ebd-483e-abfd-5ee905fcbe56/comment/6dbeb912-d06e-4230-bd8e-c1f1d91d85c4 HTTP/1.1 Host: 172.30.1.176:8080 Connection: keep-alive Content-Length: 98 accept: text/plain,application/json, application/json properties: * User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Content-Type: application/json Origin: http://172.30.1.176:8080 Referer: http://172.30.1.176:8080/nuxeo/ui/ Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q0.9 Cookie: JSESSIONID99F0E578A5198A92E7EA8BF84553FFAA.nuxeo; org.jboss.seam.core.TimeZoneAsia/Shanghai; nuxeo.start.url.fragment{entity-type:comment,parentId:3a0ab178-4ebd-483e-abfd-5ee905fcbe56,text:1111222233333}HTTP/1.1 200 X-Frame-Options: SAMEORIGIN Referrer-Policy: strict-origin-when-cross-origin X-UA-Compatible: IE10; IE11 Cache-Control: no-cache X-Content-Type-Options: nosniff Content-Security-Policy: img-src data: blob: *; default-src blob: *; script-src unsafe-inline unsafe-eval data: *; style-src unsafe-inline *; font-src data: * X-XSS-Protection: 1; modeblock Content-Type: application/json; nuxeo-entitycomment Transfer-Encoding: chunked Date: Wed, 29 May 2024 04:15:39 GMT Keep-Alive: timeout20 Connection: keep-alive342 {entity-type:comment,id:6dbeb912-d06e-4230-bd8e-c1f1d91d85c4,parentId:3a0ab178-4ebd-483e-abfd-5ee905fcbe56,ancestorIds:[3a0ab178-4ebd-483e-abfd-5ee905fcbe56],author:Administrator,text:1111222233333,creationDate:2024-05-29T04:02:02.833Z,modificationDate:2024-05-29T04:15:39.595Z,entityId:null,origin:null,entity:null,permissions:[Write,WriteVersion,ReadProperties,ReadCanCollect,ReadSecurity,Remove,ReadVersion,Read,WriteLifeCycle,Everything,Moderate,Version,ManageLegalHold,MakeRecord,WriteColdStorage,ReadChildren,AddChildren,Comment,ReadLifeCycle,RemoveChildren,DataVisualization,ReviewParticipant,Unlock,CanAskForPublishing,RestrictedRead,ReadWrite,ReadRemove,Browse,SetRetention,WriteProperties,WriteSecurity,ManageWorkflows]} 0JDK 示例 N/A SDK不支持3.6.4 删除评论 Http请求示例 DELETE /nuxeo/api/v1/id/3a0ab178-4ebd-483e-abfd-5ee905fcbe56/comment/8f69b0d7-2fdd-46ed-9085-1e934f9677cb HTTP/1.1 Host: 172.30.1.176:8080 Connection: keep-alive Content-Length: 2 accept: text/plain,application/json, application/json properties: * User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Content-Type: application/json Origin: http://172.30.1.176:8080 Referer: http://172.30.1.176:8080/nuxeo/ui/ Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q0.9 Cookie: JSESSIONID99F0E578A5198A92E7EA8BF84553FFAA.nuxeo; org.jboss.seam.core.TimeZoneAsia/Shanghai; nuxeo.start.url.fragment{}HTTP/1.1 204 X-Frame-Options: SAMEORIGIN Referrer-Policy: strict-origin-when-cross-origin X-UA-Compatible: IE10; IE11 Cache-Control: no-cache X-Content-Type-Options: nosniff Content-Security-Policy: img-src data: blob: *; default-src blob: *; script-src unsafe-inline unsafe-eval data: *; style-src unsafe-inline *; font-src data: * X-XSS-Protection: 1; modeblock Content-Type: application/json Date: Wed, 29 May 2024 04:14:05 GMT Keep-Alive: timeout20 Connection: keep-aliveJDK 示例 N/A SDK不支持3.7 权限 3.7.1 获取文档权限 Http请求示例 GET /nuxeo/api/v1/repo/default/id/3a0ab178-4ebd-483e-abfd-5ee905fcbe56/acl HTTP/1.1 Authorization: Basic QWRtaW5pc3RyYXRvcjpBZG1pbmlzdHJhdG9y Content-Type: application/json; charsetUTF-8 User-Agent: okhttp/3.14.4 NuxeoJavaClient/3.14.0 Host: 172.30.1.176:8080 Connection: Keep-Alive Accept-Encoding: gzipHTTP/1.1 200 X-Frame-Options: SAMEORIGIN Referrer-Policy: strict-origin-when-cross-origin X-UA-Compatible: IE10; IE11 Cache-Control: no-cache X-Content-Type-Options: nosniff Content-Security-Policy: img-src data: blob: *; default-src blob: *; script-src unsafe-inline unsafe-eval data: *; style-src unsafe-inline *; font-src data: * X-XSS-Protection: 1; modeblock Content-Type: application/json; nuxeo-entityacls Transfer-Encoding: chunked Date: Wed, 29 May 2024 06:53:19 GMT Keep-Alive: timeout20 Connection: keep-alive187 {entity-type:acls,acl:[{name:inherited,ace:[{id:Administrator:Everything:true:::,username:Administrator,permission:Everything,granted:true,creator:null,begin:null,end:null,status:effective},{id:Everyone:Everything:false:::,username:Everyone,permission:Everything,granted:false,creator:null,begin:null,end:null,status:effective}]}]} 0JDK 示例 Test public void fetchPermissionsTest() {String path NuxeoClientUtils.combinePath(NUXEO_PERSONAL_WORKSPACE_ROOT_PATH, NUXEO_USER_NAME_ADMIN);Repository repository this.client.repository();Document parentDoc repository.fetchDocumentByPath(path);Documents children repository.fetchChildrenById(parentDoc.getId());Document fileDoc null;for (Document document : children.getDocuments()) {NuxeoDocumentType documentType NuxeoDocumentType.getByName(document.getType());if (Objects.nonNull(documentType) documentType.isFile()) {fileDoc document;break;}}if (Objects.isNull(fileDoc)) {System.out.println(No file Document existed!);Assert.assertTrue(false);return;}ACP acp fileDoc.fetchPermissions();ListACL acls acp.getAcls();for (ACL acl : acls) {for (ACE ace : acl.getAces()) {System.out.println(User/Group: ace.getUsername() , Permission: ace.getPermission() , Granted: ace.getGranted());}}Assert.assertTrue(true); }3.7.2 新增文档权限 Http请求示例 POST /nuxeo/api/v1/automation/Document.AddPermission HTTP/1.1 Authorization: Basic QWRtaW5pc3RyYXRvcjpBZG1pbmlzdHJhdG9y User-Agent: okhttp/3.14.4 NuxeoJavaClient/3.14.0 Content-Type: application/json; charsetUTF-8 Content-Length: 228 Host: 172.30.1.176:8080 Connection: Keep-Alive Accept-Encoding: gzip{params:{creator:null,blockInheritance:false,permission:Everything,end:null,comment:null,acl:local,begin:null,user:newuser2,notify:false},context:{},input:doc:3a0ab178-4ebd-483e-abfd-5ee905fcbe56}HTTP/1.1 200 X-Frame-Options: SAMEORIGIN Referrer-Policy: strict-origin-when-cross-origin X-UA-Compatible: IE10; IE11 Cache-Control: no-cache X-Content-Type-Options: nosniff Content-Security-Policy: img-src data: blob: *; default-src blob: *; script-src unsafe-inline unsafe-eval data: *; style-src unsafe-inline *; font-src data: * X-XSS-Protection: 1; modeblock Content-Type: application/json; nuxeo-entitydocument Transfer-Encoding: chunked Date: Wed, 29 May 2024 07:33:00 GMT Keep-Alive: timeout20 Connection: keep-alive3b2 {entity-type:document,repository:default,uid:3a0ab178-4ebd-483e-abfd-5ee905fcbe56,path:/default-domain/UserWorkspaces/Administrator/IM-SERVER...................docx,type:File,state:project,parentRef:727303eb-42c6-4f39-bbb7-e8be8305f9a1,isCheckedOut:true,isRecord:false,retainUntil:null,hasLegalHold:false,isUnderRetentionOrLegalHold:false,isVersion:false,isProxy:false,changeToken:7-0,isTrashed:false,title:IM-SERVER...................docx,lastModified:2024-05-23T01:59:51.835Z,facets:[Versionable,NXTag,Notifiable,Publishable,Commentable,HasRelatedText,Downloadable],schemas:[{name:uid,prefix:uid},{name:notification,prefix:notif},{name:file,prefix:file},{name:common,prefix:common},{name:files,prefix:files},{name:dublincore,prefix:dc},{name:relatedtext,prefix:relatedtext},{name:facetedTag,prefix:nxtag}]} 0JDK 示例 Test public void addPermissionTest() {String path NuxeoClientUtils.combinePath(NUXEO_PERSONAL_WORKSPACE_ROOT_PATH, NUXEO_USER_NAME_ADMIN);Repository repository this.client.repository();Document parentDoc repository.fetchDocumentByPath(path);Documents children repository.fetchChildrenById(parentDoc.getId());Document fileDoc null;for (Document document : children.getDocuments()) {NuxeoDocumentType documentType NuxeoDocumentType.getByName(document.getType());if (Objects.nonNull(documentType) documentType.isFile()) {fileDoc document;break;}}if (Objects.isNull(fileDoc)) {System.out.println(No file Document existed!);Assert.assertTrue(false);return;}ACE ace new ACE();ace.setUsername(newuser2);ace.setPermission(Everything);ace.setGranted(true);fileDoc.addPermission(ace);System.out.println(Document.addPermission() done, docId: fileDoc.getId() ,ace.userName: ace.getUsername() , ace.Permission ace.getPermission());Assert.assertTrue(true); }3.7.2 移除文档权限 Http请求示例 POST /nuxeo/api/v1/automation/Document.RemovePermission HTTP/1.1 Authorization: Basic QWRtaW5pc3RyYXRvcjpBZG1pbmlzdHJhdG9y User-Agent: okhttp/3.14.4 NuxeoJavaClient/3.14.0 Content-Type: application/json; charsetUTF-8 Content-Length: 118 Host: 172.30.1.176:8080 Connection: Keep-Alive Accept-Encoding: gzip{params:{id:null,acl:local,user:newuser2},context:{},input:doc:3a0ab178-4ebd-483e-abfd-5ee905fcbe56}HTTP/1.1 200 X-Frame-Options: SAMEORIGIN Referrer-Policy: strict-origin-when-cross-origin X-UA-Compatible: IE10; IE11 Cache-Control: no-cache X-Content-Type-Options: nosniff Content-Security-Policy: img-src data: blob: *; default-src blob: *; script-src unsafe-inline unsafe-eval data: *; style-src unsafe-inline *; font-src data: * X-XSS-Protection: 1; modeblock Content-Type: application/json; nuxeo-entitydocument Transfer-Encoding: chunked Date: Wed, 29 May 2024 07:40:01 GMT Keep-Alive: timeout20 Connection: keep-alive3b2 {entity-type:document,repository:default,uid:3a0ab178-4ebd-483e-abfd-5ee905fcbe56,path:/default-domain/UserWorkspaces/Administrator/IM-SERVER...................docx,type:File,state:project,parentRef:727303eb-42c6-4f39-bbb7-e8be8305f9a1,isCheckedOut:true,isRecord:false,retainUntil:null,hasLegalHold:false,isUnderRetentionOrLegalHold:false,isVersion:false,isProxy:false,changeToken:7-0,isTrashed:false,title:IM-SERVER...................docx,lastModified:2024-05-23T01:59:51.835Z,facets:[Versionable,NXTag,Notifiable,Publishable,Commentable,HasRelatedText,Downloadable],schemas:[{name:uid,prefix:uid},{name:notification,prefix:notif},{name:file,prefix:file},{name:common,prefix:common},{name:files,prefix:files},{name:dublincore,prefix:dc},{name:relatedtext,prefix:relatedtext},{name:facetedTag,prefix:nxtag}]} 0JDK 示例 Test public void removePermissionTest() {String path NuxeoClientUtils.combinePath(NUXEO_PERSONAL_WORKSPACE_ROOT_PATH, NUXEO_USER_NAME_ADMIN);Repository repository this.client.repository();Document parentDoc repository.fetchDocumentByPath(path);Documents children repository.fetchChildrenById(parentDoc.getId());Document fileDoc null;for (Document document : children.getDocuments()) {NuxeoDocumentType documentType NuxeoDocumentType.getByName(document.getType());if (Objects.nonNull(documentType) documentType.isFile()) {fileDoc document;break;}}if (Objects.isNull(fileDoc)) {System.out.println(No file Document existed!);Assert.assertTrue(false);return;}String userName newuser2;fileDoc.removePermission(userName);System.out.println(Document.removePermission() done, docId: fileDoc.getId() ,userName: userName);Assert.assertTrue(true); }原创不易请给作者打赏或点赞您的支持是我坚持原创和分享的最大动力
http://www.dnsts.com.cn/news/74562.html

相关文章:

  • 网站开发毕业设计评审表古典网站素材
  • 简要描述网站开发过程公司域名不变网站做变动
  • 海口哪里做网站公司网站建设背景分析论文
  • 有没有在家做的手工活网站麋鹿 wordpress
  • 园林网站免费模板沈阳网站建设教案模板
  • 网站建设功能需求表怎么做自动提卡网站
  • 北京兼职网站建设中文wordpress网站模板
  • 洛阳网站建设制作多少钱一起做业网站登录
  • 网站配色绿色英语培训网站建设
  • 开发一个网站成本阿里云wordpress建站
  • 深圳高端网站设计开发广州网络营销公司排名
  • 猎场第几集做的网站推广wordpress 静态链接
  • 甘肃省建设厅门户网站wordpress static配置
  • wordpress qode怎样做seo网站链接
  • 58同城泉州网站建设义乌本地网站开发
  • 清廉桂林网站化妆品网站制作需要
  • 网站建设 福步 2018读书分享会ppt模板免费下载
  • 怎么建设电影网站wordpress的点商
  • 机房建设 网站网站 设计理念
  • 宁德公司做网站wordpress缺少临时文件夹
  • 丽水市做网站的网站推广优化教程
  • 棠下手机网站建设报价wordpress腾讯云cos
  • 淘宝网站优化实例软件外包是什么意思
  • 网上做网站网站花都网站建设公司怎么样
  • 网络营销策划过程搜索引擎优化的完整过程
  • 网站制作项目执行中山祥云网站建设
  • 微设计公司网站合肥广告牌制作公司
  • 建设网站运营成本wordpress search标签页
  • 电子商务网站建设与规划案例网站上面的内容里面放照片怎么做
  • 网站建设与优化标准苏州保洁公司多少钱一个平方