Skip to content

Commit 6638383

Browse files
authored
🆕 #2643【企业微信】增加微盘获取文件列表的接口
1 parent 458e7c3 commit 6638383

File tree

8 files changed

+325
-2
lines changed

8 files changed

+325
-2
lines changed

Diff for: weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpOaWeDriveService.java

+26
Original file line numberDiff line numberDiff line change
@@ -121,4 +121,30 @@ public interface WxCpOaWeDriveService {
121121
*/
122122
WxCpSpaceShare spaceShare(@NonNull String userId, @NonNull String spaceId) throws WxErrorException;
123123

124+
/**
125+
* 获取文件列表
126+
* 该接口用于获取指定地址下的文件列表。
127+
* <p>
128+
* 请求方式:POST(HTTPS)
129+
* 请求地址: https://qyapi.weixin.qq.com/cgi-bin/wedrive/file_list?access_token=ACCESS_TOKEN
130+
*
131+
* @param request 获取文件列表请求参数
132+
* @return
133+
* @throws WxErrorException
134+
*/
135+
WxCpFileList fileList(@NonNull WxCpFileListRequest request) throws WxErrorException;
136+
137+
/**
138+
* 上传文件
139+
* 该接口用于向微盘中的指定位置上传文件。
140+
* <p>
141+
* 请求方式:POST(HTTPS)
142+
* 请求地址: https://qyapi.weixin.qq.com/cgi-bin/wedrive/file_upload?access_token=ACCESS_TOKEN
143+
*
144+
* @param request 上传文件请求参数
145+
* @return
146+
* @throws WxErrorException
147+
*/
148+
WxCpFileUpload fileUpload(@NonNull WxCpFileUploadRequest request) throws WxErrorException;
149+
124150
}

Diff for: weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpOaWeDriveServiceImpl.java

+14
Original file line numberDiff line numberDiff line change
@@ -88,4 +88,18 @@ public WxCpSpaceShare spaceShare(@NonNull String userId, @NonNull String spaceId
8888
return WxCpSpaceShare.fromJson(responseContent);
8989
}
9090

91+
@Override
92+
public WxCpFileList fileList(@NonNull WxCpFileListRequest request) throws WxErrorException {
93+
String apiUrl = this.cpService.getWxCpConfigStorage().getApiUrl(FILE_LIST);
94+
String responseContent = this.cpService.post(apiUrl, request.toJson());
95+
return WxCpFileList.fromJson(responseContent);
96+
}
97+
98+
@Override
99+
public WxCpFileUpload fileUpload(@NonNull WxCpFileUploadRequest request) throws WxErrorException {
100+
String apiUrl = this.cpService.getWxCpConfigStorage().getApiUrl(FILE_UPLOAD);
101+
String responseContent = this.cpService.post(apiUrl, request.toJson());
102+
return WxCpFileUpload.fromJson(responseContent);
103+
}
104+
91105
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
package me.chanjar.weixin.cp.bean.oa.wedrive;
2+
3+
import com.google.gson.annotations.SerializedName;
4+
import lombok.Data;
5+
import lombok.Getter;
6+
import lombok.Setter;
7+
import me.chanjar.weixin.cp.bean.WxCpBaseResp;
8+
import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
9+
10+
import java.io.Serializable;
11+
import java.util.List;
12+
13+
/**
14+
* 获取邀请链接.
15+
*
16+
* @author Wang_Wong
17+
*/
18+
@Data
19+
public class WxCpFileList extends WxCpBaseResp implements Serializable {
20+
private static final long serialVersionUID = -5028321625142879581L;
21+
22+
@SerializedName("has_more")
23+
private Boolean hasMore;
24+
25+
@SerializedName("next_start")
26+
private Integer nextStart;
27+
28+
@SerializedName("file_list")
29+
private FileList fileList;
30+
31+
@Getter
32+
@Setter
33+
public static class FileList implements Serializable {
34+
private static final long serialVersionUID = -4960239393895754598L;
35+
36+
@SerializedName("item")
37+
private List<Item> item;
38+
39+
public static FileList fromJson(String json) {
40+
return WxCpGsonBuilder.create().fromJson(json, FileList.class);
41+
}
42+
43+
public String toJson() {
44+
return WxCpGsonBuilder.create().toJson(this);
45+
}
46+
47+
}
48+
49+
@Getter
50+
@Setter
51+
public static class Item implements Serializable {
52+
private static final long serialVersionUID = -4960239393895754598L;
53+
54+
@SerializedName("fileid")
55+
private String fileId;
56+
57+
@SerializedName("file_name")
58+
private String fileName;
59+
60+
@SerializedName("spaceid")
61+
private String spaceId;
62+
63+
@SerializedName("fatherid")
64+
private String fatherId;
65+
66+
@SerializedName("file_size")
67+
private Long fileSize;
68+
69+
@SerializedName("ctime")
70+
private Long cTime;
71+
72+
@SerializedName("mtime")
73+
private Long mTime;
74+
75+
@SerializedName("file_type")
76+
private Integer fileType;
77+
78+
@SerializedName("file_status")
79+
private Integer fileStatus;
80+
81+
@SerializedName("create_userid")
82+
private String createUserId;
83+
84+
@SerializedName("update_userid")
85+
private String updateUserId;
86+
87+
@SerializedName("sha")
88+
private String sha;
89+
90+
@SerializedName("url")
91+
private String url;
92+
93+
@SerializedName("md5")
94+
private String md5;
95+
96+
public static Item fromJson(String json) {
97+
return WxCpGsonBuilder.create().fromJson(json, Item.class);
98+
}
99+
100+
public String toJson() {
101+
return WxCpGsonBuilder.create().toJson(this);
102+
}
103+
104+
}
105+
106+
public static WxCpFileList fromJson(String json) {
107+
return WxCpGsonBuilder.create().fromJson(json, WxCpFileList.class);
108+
}
109+
110+
public String toJson() {
111+
return WxCpGsonBuilder.create().toJson(this);
112+
}
113+
114+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package me.chanjar.weixin.cp.bean.oa.wedrive;
2+
3+
import com.google.gson.annotations.SerializedName;
4+
import lombok.AllArgsConstructor;
5+
import lombok.Builder;
6+
import lombok.Data;
7+
import lombok.NoArgsConstructor;
8+
import lombok.experimental.Accessors;
9+
import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
10+
11+
import java.io.Serializable;
12+
13+
/**
14+
* 获取文件列表请求.
15+
*/
16+
@Data
17+
@Builder
18+
@NoArgsConstructor
19+
@AllArgsConstructor
20+
@Accessors(chain = true)
21+
public class WxCpFileListRequest implements Serializable {
22+
private static final long serialVersionUID = -4960239393895754138L;
23+
24+
@SerializedName("userid")
25+
private String userId;
26+
27+
@SerializedName("spaceid")
28+
private String spaceId;
29+
30+
@SerializedName("fatherid")
31+
private String fatherId;
32+
33+
@SerializedName("sort_type")
34+
private Integer sortType;
35+
36+
@SerializedName("start")
37+
private Integer start;
38+
39+
@SerializedName("limit")
40+
private Integer limit;
41+
42+
public static WxCpFileListRequest fromJson(String json) {
43+
return WxCpGsonBuilder.create().fromJson(json, WxCpFileListRequest.class);
44+
}
45+
46+
public String toJson() {
47+
return WxCpGsonBuilder.create().toJson(this);
48+
}
49+
50+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package me.chanjar.weixin.cp.bean.oa.wedrive;
2+
3+
import com.google.gson.annotations.SerializedName;
4+
import lombok.Data;
5+
import me.chanjar.weixin.cp.bean.WxCpBaseResp;
6+
import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
7+
8+
import java.io.Serializable;
9+
10+
/**
11+
* 上传文件返回信息.
12+
*
13+
* @author Wang_Wong
14+
*/
15+
@Data
16+
public class WxCpFileUpload extends WxCpBaseResp implements Serializable {
17+
private static final long serialVersionUID = -5028321625142879581L;
18+
19+
@SerializedName("fileid")
20+
private String fileId;
21+
22+
public static WxCpFileUpload fromJson(String json) {
23+
return WxCpGsonBuilder.create().fromJson(json, WxCpFileUpload.class);
24+
}
25+
26+
public String toJson() {
27+
return WxCpGsonBuilder.create().toJson(this);
28+
}
29+
30+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package me.chanjar.weixin.cp.bean.oa.wedrive;
2+
3+
import com.google.gson.annotations.SerializedName;
4+
import lombok.AllArgsConstructor;
5+
import lombok.Builder;
6+
import lombok.Data;
7+
import lombok.NoArgsConstructor;
8+
import lombok.experimental.Accessors;
9+
import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
10+
11+
import java.io.Serializable;
12+
13+
/**
14+
* 上传文件请求.
15+
*/
16+
@Data
17+
@Builder
18+
@NoArgsConstructor
19+
@AllArgsConstructor
20+
@Accessors(chain = true)
21+
public class WxCpFileUploadRequest implements Serializable {
22+
private static final long serialVersionUID = -4960239393895754138L;
23+
24+
@SerializedName("userid")
25+
private String userId;
26+
27+
@SerializedName("spaceid")
28+
private String spaceId;
29+
30+
@SerializedName("fatherid")
31+
private String fatherId;
32+
33+
@SerializedName("file_name")
34+
private String fileName;
35+
36+
@SerializedName("file_base64_content")
37+
private String fileBase64Content;
38+
39+
public static WxCpFileUploadRequest fromJson(String json) {
40+
return WxCpGsonBuilder.create().fromJson(json, WxCpFileUploadRequest.class);
41+
}
42+
43+
public String toJson() {
44+
return WxCpGsonBuilder.create().toJson(this);
45+
}
46+
47+
}

Diff for: weixin-java-cp/src/main/java/me/chanjar/weixin/cp/constant/WxCpApiPathConsts.java

+2
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,8 @@ interface Oa {
153153
String SPACE_ACL_DEL = "/cgi-bin/wedrive/space_acl_del";
154154
String SPACE_SETTING = "/cgi-bin/wedrive/space_setting";
155155
String SPACE_SHARE = "/cgi-bin/wedrive/space_share";
156+
String FILE_LIST = "/cgi-bin/wedrive/file_list";
157+
String FILE_UPLOAD = "/cgi-bin/wedrive/file_upload";
156158

157159
/**
158160
* 审批流程引擎

Diff for: weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/WxCpOaWeDriveServiceTest.java

+42-2
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
package me.chanjar.weixin.cp.api;
2+
23
import lombok.extern.slf4j.Slf4j;
3-
import me.chanjar.weixin.common.error.WxErrorException;
44
import me.chanjar.weixin.cp.api.impl.WxCpServiceImpl;
55
import me.chanjar.weixin.cp.bean.WxCpBaseResp;
66
import me.chanjar.weixin.cp.bean.oa.wedrive.*;
77
import me.chanjar.weixin.cp.config.WxCpConfigStorage;
88
import me.chanjar.weixin.cp.demo.WxCpDemoInMemoryConfigStorage;
99
import org.testng.annotations.Test;
10+
import sun.misc.BASE64Encoder;
1011

12+
import java.io.File;
13+
import java.io.FileInputStream;
1114
import java.io.InputStream;
1215
import java.util.ArrayList;
1316
import java.util.List;
@@ -25,7 +28,7 @@ public class WxCpOaWeDriveServiceTest {
2528
private static WxCpService cpService;
2629

2730
@Test
28-
public void test() throws WxErrorException {
31+
public void test() throws Exception {
2932

3033
InputStream inputStream = ClassLoader.getSystemResourceAsStream("test-config.xml");
3134
WxCpDemoInMemoryConfigStorage config = WxCpDemoInMemoryConfigStorage.fromXml(inputStream);
@@ -40,6 +43,43 @@ public void test() throws WxErrorException {
4043

4144
String uId = "WangKai";
4245
String spId = "s.ww45d3e188865aca30.652091685u4h";
46+
// 空间的文件id
47+
String fileId = "s.ww45d3e188865aca30.652091685u4h_f.652344507ysDL";
48+
49+
/**
50+
* 上传文件
51+
*/
52+
WxCpFileUploadRequest fileUploadRequest = new WxCpFileUploadRequest();
53+
fileUploadRequest.setUserId(uId);
54+
fileUploadRequest.setSpaceId(spId);
55+
fileUploadRequest.setFatherId(spId);
56+
fileUploadRequest.setFileName("第一个文件");
57+
58+
// 将文件转成base64字符串
59+
File file = new File("D:/info.log.2022-05-07.0.log");
60+
FileInputStream inputFile = new FileInputStream(file);
61+
byte[] buffer = new byte[(int)file.length()];
62+
inputFile.read(buffer);
63+
inputFile.close();
64+
String encodeBase64Content = new BASE64Encoder().encode(buffer);
65+
fileUploadRequest.setFileBase64Content(encodeBase64Content);
66+
67+
WxCpFileUpload fileUpload = cpService.getOaWeDriveService().fileUpload(fileUploadRequest);
68+
log.info("上传文件为:{}", fileUpload.toJson());
69+
70+
/**
71+
* 获取文件列表
72+
*/
73+
WxCpFileListRequest fileListRequest = new WxCpFileListRequest();
74+
fileListRequest.setUserId(uId);
75+
fileListRequest.setSpaceId(spId);
76+
fileListRequest.setFatherId(spId);
77+
fileListRequest.setSortType(1);
78+
fileListRequest.setStart(0);
79+
fileListRequest.setLimit(100);
80+
81+
WxCpFileList fileList = cpService.getOaWeDriveService().fileList(fileListRequest);
82+
log.info("获取文件列表为:{}", fileList.toJson());
4383

4484
/**
4585
* 权限管理

0 commit comments

Comments
 (0)