From 66383836b8e4655c4d000d8d186f623772e98f1a Mon Sep 17 00:00:00 2001
From: 0katekate0 <32161300+0katekate0@users.noreply.github.com>
Date: Sun, 15 May 2022 19:37:32 +0800
Subject: [PATCH] =?UTF-8?q?:new:=20#2643=E3=80=90=E4=BC=81=E4=B8=9A?=
=?UTF-8?q?=E5=BE=AE=E4=BF=A1=E3=80=91=E5=A2=9E=E5=8A=A0=E5=BE=AE=E7=9B=98?=
=?UTF-8?q?=E8=8E=B7=E5=8F=96=E6=96=87=E4=BB=B6=E5=88=97=E8=A1=A8=E7=9A=84?=
=?UTF-8?q?=E6=8E=A5=E5=8F=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../weixin/cp/api/WxCpOaWeDriveService.java | 26 ++++
.../cp/api/impl/WxCpOaWeDriveServiceImpl.java | 14 +++
.../cp/bean/oa/wedrive/WxCpFileList.java | 114 ++++++++++++++++++
.../bean/oa/wedrive/WxCpFileListRequest.java | 50 ++++++++
.../cp/bean/oa/wedrive/WxCpFileUpload.java | 30 +++++
.../oa/wedrive/WxCpFileUploadRequest.java | 47 ++++++++
.../weixin/cp/constant/WxCpApiPathConsts.java | 2 +
.../cp/api/WxCpOaWeDriveServiceTest.java | 44 ++++++-
8 files changed, 325 insertions(+), 2 deletions(-)
create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/wedrive/WxCpFileList.java
create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/wedrive/WxCpFileListRequest.java
create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/wedrive/WxCpFileUpload.java
create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/wedrive/WxCpFileUploadRequest.java
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpOaWeDriveService.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpOaWeDriveService.java
index 8f6c51ad9..dd27ddbf8 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpOaWeDriveService.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpOaWeDriveService.java
@@ -121,4 +121,30 @@ public interface WxCpOaWeDriveService {
*/
WxCpSpaceShare spaceShare(@NonNull String userId, @NonNull String spaceId) throws WxErrorException;
+ /**
+ * 获取文件列表
+ * 该接口用于获取指定地址下的文件列表。
+ *
+ * 请求方式:POST(HTTPS)
+ * 请求地址: https://qyapi.weixin.qq.com/cgi-bin/wedrive/file_list?access_token=ACCESS_TOKEN
+ *
+ * @param request 获取文件列表请求参数
+ * @return
+ * @throws WxErrorException
+ */
+ WxCpFileList fileList(@NonNull WxCpFileListRequest request) throws WxErrorException;
+
+ /**
+ * 上传文件
+ * 该接口用于向微盘中的指定位置上传文件。
+ *
+ * 请求方式:POST(HTTPS)
+ * 请求地址: https://qyapi.weixin.qq.com/cgi-bin/wedrive/file_upload?access_token=ACCESS_TOKEN
+ *
+ * @param request 上传文件请求参数
+ * @return
+ * @throws WxErrorException
+ */
+ WxCpFileUpload fileUpload(@NonNull WxCpFileUploadRequest request) throws WxErrorException;
+
}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpOaWeDriveServiceImpl.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpOaWeDriveServiceImpl.java
index 4ed2da2c9..188ba2bb6 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpOaWeDriveServiceImpl.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpOaWeDriveServiceImpl.java
@@ -88,4 +88,18 @@ public class WxCpOaWeDriveServiceImpl implements WxCpOaWeDriveService {
return WxCpSpaceShare.fromJson(responseContent);
}
+ @Override
+ public WxCpFileList fileList(@NonNull WxCpFileListRequest request) throws WxErrorException {
+ String apiUrl = this.cpService.getWxCpConfigStorage().getApiUrl(FILE_LIST);
+ String responseContent = this.cpService.post(apiUrl, request.toJson());
+ return WxCpFileList.fromJson(responseContent);
+ }
+
+ @Override
+ public WxCpFileUpload fileUpload(@NonNull WxCpFileUploadRequest request) throws WxErrorException {
+ String apiUrl = this.cpService.getWxCpConfigStorage().getApiUrl(FILE_UPLOAD);
+ String responseContent = this.cpService.post(apiUrl, request.toJson());
+ return WxCpFileUpload.fromJson(responseContent);
+ }
+
}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/wedrive/WxCpFileList.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/wedrive/WxCpFileList.java
new file mode 100644
index 000000000..b217afdb8
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/wedrive/WxCpFileList.java
@@ -0,0 +1,114 @@
+package me.chanjar.weixin.cp.bean.oa.wedrive;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
+import me.chanjar.weixin.cp.bean.WxCpBaseResp;
+import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 获取邀请链接.
+ *
+ * @author Wang_Wong
+ */
+@Data
+public class WxCpFileList extends WxCpBaseResp implements Serializable {
+ private static final long serialVersionUID = -5028321625142879581L;
+
+ @SerializedName("has_more")
+ private Boolean hasMore;
+
+ @SerializedName("next_start")
+ private Integer nextStart;
+
+ @SerializedName("file_list")
+ private FileList fileList;
+
+ @Getter
+ @Setter
+ public static class FileList implements Serializable {
+ private static final long serialVersionUID = -4960239393895754598L;
+
+ @SerializedName("item")
+ private List- item;
+
+ public static FileList fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, FileList.class);
+ }
+
+ public String toJson() {
+ return WxCpGsonBuilder.create().toJson(this);
+ }
+
+ }
+
+ @Getter
+ @Setter
+ public static class Item implements Serializable {
+ private static final long serialVersionUID = -4960239393895754598L;
+
+ @SerializedName("fileid")
+ private String fileId;
+
+ @SerializedName("file_name")
+ private String fileName;
+
+ @SerializedName("spaceid")
+ private String spaceId;
+
+ @SerializedName("fatherid")
+ private String fatherId;
+
+ @SerializedName("file_size")
+ private Long fileSize;
+
+ @SerializedName("ctime")
+ private Long cTime;
+
+ @SerializedName("mtime")
+ private Long mTime;
+
+ @SerializedName("file_type")
+ private Integer fileType;
+
+ @SerializedName("file_status")
+ private Integer fileStatus;
+
+ @SerializedName("create_userid")
+ private String createUserId;
+
+ @SerializedName("update_userid")
+ private String updateUserId;
+
+ @SerializedName("sha")
+ private String sha;
+
+ @SerializedName("url")
+ private String url;
+
+ @SerializedName("md5")
+ private String md5;
+
+ public static Item fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, Item.class);
+ }
+
+ public String toJson() {
+ return WxCpGsonBuilder.create().toJson(this);
+ }
+
+ }
+
+ public static WxCpFileList fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, WxCpFileList.class);
+ }
+
+ public String toJson() {
+ return WxCpGsonBuilder.create().toJson(this);
+ }
+
+}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/wedrive/WxCpFileListRequest.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/wedrive/WxCpFileListRequest.java
new file mode 100644
index 000000000..361a2d4be
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/wedrive/WxCpFileListRequest.java
@@ -0,0 +1,50 @@
+package me.chanjar.weixin.cp.bean.oa.wedrive;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
+
+import java.io.Serializable;
+
+/**
+ * 获取文件列表请求.
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@Accessors(chain = true)
+public class WxCpFileListRequest implements Serializable {
+ private static final long serialVersionUID = -4960239393895754138L;
+
+ @SerializedName("userid")
+ private String userId;
+
+ @SerializedName("spaceid")
+ private String spaceId;
+
+ @SerializedName("fatherid")
+ private String fatherId;
+
+ @SerializedName("sort_type")
+ private Integer sortType;
+
+ @SerializedName("start")
+ private Integer start;
+
+ @SerializedName("limit")
+ private Integer limit;
+
+ public static WxCpFileListRequest fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, WxCpFileListRequest.class);
+ }
+
+ public String toJson() {
+ return WxCpGsonBuilder.create().toJson(this);
+ }
+
+}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/wedrive/WxCpFileUpload.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/wedrive/WxCpFileUpload.java
new file mode 100644
index 000000000..96617dd34
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/wedrive/WxCpFileUpload.java
@@ -0,0 +1,30 @@
+package me.chanjar.weixin.cp.bean.oa.wedrive;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+import me.chanjar.weixin.cp.bean.WxCpBaseResp;
+import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
+
+import java.io.Serializable;
+
+/**
+ * 上传文件返回信息.
+ *
+ * @author Wang_Wong
+ */
+@Data
+public class WxCpFileUpload extends WxCpBaseResp implements Serializable {
+ private static final long serialVersionUID = -5028321625142879581L;
+
+ @SerializedName("fileid")
+ private String fileId;
+
+ public static WxCpFileUpload fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, WxCpFileUpload.class);
+ }
+
+ public String toJson() {
+ return WxCpGsonBuilder.create().toJson(this);
+ }
+
+}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/wedrive/WxCpFileUploadRequest.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/wedrive/WxCpFileUploadRequest.java
new file mode 100644
index 000000000..9d2aa7c3f
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/wedrive/WxCpFileUploadRequest.java
@@ -0,0 +1,47 @@
+package me.chanjar.weixin.cp.bean.oa.wedrive;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
+
+import java.io.Serializable;
+
+/**
+ * 上传文件请求.
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@Accessors(chain = true)
+public class WxCpFileUploadRequest implements Serializable {
+ private static final long serialVersionUID = -4960239393895754138L;
+
+ @SerializedName("userid")
+ private String userId;
+
+ @SerializedName("spaceid")
+ private String spaceId;
+
+ @SerializedName("fatherid")
+ private String fatherId;
+
+ @SerializedName("file_name")
+ private String fileName;
+
+ @SerializedName("file_base64_content")
+ private String fileBase64Content;
+
+ public static WxCpFileUploadRequest fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, WxCpFileUploadRequest.class);
+ }
+
+ public String toJson() {
+ return WxCpGsonBuilder.create().toJson(this);
+ }
+
+}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/constant/WxCpApiPathConsts.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/constant/WxCpApiPathConsts.java
index 57dd9d47e..8eae00d57 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/constant/WxCpApiPathConsts.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/constant/WxCpApiPathConsts.java
@@ -153,6 +153,8 @@ public interface WxCpApiPathConsts {
String SPACE_ACL_DEL = "/cgi-bin/wedrive/space_acl_del";
String SPACE_SETTING = "/cgi-bin/wedrive/space_setting";
String SPACE_SHARE = "/cgi-bin/wedrive/space_share";
+ String FILE_LIST = "/cgi-bin/wedrive/file_list";
+ String FILE_UPLOAD = "/cgi-bin/wedrive/file_upload";
/**
* 审批流程引擎
diff --git a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/WxCpOaWeDriveServiceTest.java b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/WxCpOaWeDriveServiceTest.java
index 5a7f93404..e51ef106c 100644
--- a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/WxCpOaWeDriveServiceTest.java
+++ b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/WxCpOaWeDriveServiceTest.java
@@ -1,13 +1,16 @@
package me.chanjar.weixin.cp.api;
+
import lombok.extern.slf4j.Slf4j;
-import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.cp.api.impl.WxCpServiceImpl;
import me.chanjar.weixin.cp.bean.WxCpBaseResp;
import me.chanjar.weixin.cp.bean.oa.wedrive.*;
import me.chanjar.weixin.cp.config.WxCpConfigStorage;
import me.chanjar.weixin.cp.demo.WxCpDemoInMemoryConfigStorage;
import org.testng.annotations.Test;
+import sun.misc.BASE64Encoder;
+import java.io.File;
+import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
@@ -25,7 +28,7 @@ public class WxCpOaWeDriveServiceTest {
private static WxCpService cpService;
@Test
- public void test() throws WxErrorException {
+ public void test() throws Exception {
InputStream inputStream = ClassLoader.getSystemResourceAsStream("test-config.xml");
WxCpDemoInMemoryConfigStorage config = WxCpDemoInMemoryConfigStorage.fromXml(inputStream);
@@ -40,6 +43,43 @@ public class WxCpOaWeDriveServiceTest {
String uId = "WangKai";
String spId = "s.ww45d3e188865aca30.652091685u4h";
+ // 空间的文件id
+ String fileId = "s.ww45d3e188865aca30.652091685u4h_f.652344507ysDL";
+
+ /**
+ * 上传文件
+ */
+ WxCpFileUploadRequest fileUploadRequest = new WxCpFileUploadRequest();
+ fileUploadRequest.setUserId(uId);
+ fileUploadRequest.setSpaceId(spId);
+ fileUploadRequest.setFatherId(spId);
+ fileUploadRequest.setFileName("第一个文件");
+
+ // 将文件转成base64字符串
+ File file = new File("D:/info.log.2022-05-07.0.log");
+ FileInputStream inputFile = new FileInputStream(file);
+ byte[] buffer = new byte[(int)file.length()];
+ inputFile.read(buffer);
+ inputFile.close();
+ String encodeBase64Content = new BASE64Encoder().encode(buffer);
+ fileUploadRequest.setFileBase64Content(encodeBase64Content);
+
+ WxCpFileUpload fileUpload = cpService.getOaWeDriveService().fileUpload(fileUploadRequest);
+ log.info("上传文件为:{}", fileUpload.toJson());
+
+ /**
+ * 获取文件列表
+ */
+ WxCpFileListRequest fileListRequest = new WxCpFileListRequest();
+ fileListRequest.setUserId(uId);
+ fileListRequest.setSpaceId(spId);
+ fileListRequest.setFatherId(spId);
+ fileListRequest.setSortType(1);
+ fileListRequest.setStart(0);
+ fileListRequest.setLimit(100);
+
+ WxCpFileList fileList = cpService.getOaWeDriveService().fileList(fileListRequest);
+ log.info("获取文件列表为:{}", fileList.toJson());
/**
* 权限管理