|
|
@@ -21,6 +21,7 @@ import com.kede.common.dao.ChatMsgUserMapper;
|
|
|
import javax.annotation.Resource;
|
|
|
import java.io.File;
|
|
|
import java.io.FileOutputStream;
|
|
|
+import java.io.UnsupportedEncodingException;
|
|
|
import java.util.*;
|
|
|
|
|
|
@Service("ConversationContentService")
|
|
|
@@ -42,6 +43,8 @@ public class ConversationContentServiceImpl implements ConversationContentServic
|
|
|
private String appSecret;
|
|
|
@Value(value = "${conversationContent.addressBook.secret}")
|
|
|
private String addressBookSecret;
|
|
|
+ @Value(value = "${upload.path}")
|
|
|
+ private String uploadPath;
|
|
|
|
|
|
|
|
|
|
|
|
@@ -138,94 +141,15 @@ public class ConversationContentServiceImpl implements ConversationContentServic
|
|
|
com.alibaba.fastjson.JSONObject jsonObject = com.alibaba.fastjson.JSONObject.parseObject(str);
|
|
|
System.out.println("获取slice内容======="+jsonObject);
|
|
|
String msgtype = jsonObject.getString("msgtype");
|
|
|
- if (msgtype.equals("text")){
|
|
|
- InputChatMsg chatMsg = new InputChatMsg(jsonObject);
|
|
|
- list.add(chatMsg);
|
|
|
- }else if (msgtype.equals("image")){
|
|
|
- com.alibaba.fastjson.JSONObject image = jsonObject.getJSONObject("image");
|
|
|
- String sdkfileid = image.getString("sdkfileid");
|
|
|
- String indexbuf = "";
|
|
|
- while(true){
|
|
|
-
|
|
|
- //每次使用GetMediaData拉取存档前需要调用NewMediaData获取一个media_data,在使用完media_data中数据后,还需要调用FreeMediaData释放。
|
|
|
- long media_data = Finance.NewMediaData();
|
|
|
- ret = Finance.GetMediaData(sdk, indexbuf, sdkfileid, null, null, 3, media_data);
|
|
|
- if(ret!=0){
|
|
|
- System.out.println("getmediadata ret:" + ret);
|
|
|
- Finance.FreeMediaData(media_data);
|
|
|
- return null;
|
|
|
- }
|
|
|
- System.out.printf("getmediadata outindex len:%d, data_len:%d, is_finis:%d\n",Finance.GetIndexLen(media_data),Finance.GetDataLen(media_data), Finance.IsMediaDataFinish(media_data));
|
|
|
- try {
|
|
|
-
|
|
|
- File file = new File("F:\\test\\123.jpg");
|
|
|
- if (!file.getParentFile().exists()) {
|
|
|
- file.getParentFile().mkdirs(); // 自动创建缺失的父目录
|
|
|
- }
|
|
|
- //大于512k的文件会分片拉取,此处需要使用追加写,避免后面的分片覆盖之前的数据。
|
|
|
- FileOutputStream outputStream = new FileOutputStream(new File("F:\\test\\123.jpg"), true);
|
|
|
- outputStream.write(Finance.GetData(media_data));
|
|
|
- outputStream.close();
|
|
|
- } catch (Exception e) {
|
|
|
- e.printStackTrace();
|
|
|
- }
|
|
|
-
|
|
|
- if(Finance.IsMediaDataFinish(media_data) == 1)
|
|
|
- {
|
|
|
- //已经拉取完成最后一个分片
|
|
|
- Finance.FreeMediaData(media_data);
|
|
|
- break;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- //获取下次拉取需要使用的indexbuf
|
|
|
- indexbuf = Finance.GetOutIndexBuf(media_data);
|
|
|
- Finance.FreeMediaData(media_data);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ InputChatMsg chatMsg = new InputChatMsg(jsonObject);
|
|
|
+ String url=pushFileUrl(sdk,ret,jsonObject);
|
|
|
+ chatMsg.setContent(url);
|
|
|
+ list.add(chatMsg);
|
|
|
|
|
|
- Finance.FreeSlice(msg);
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
- //拉取媒体数据
|
|
|
-// String indexbuf = "";
|
|
|
-// while(true){
|
|
|
-// //每次使用GetMediaData拉取存档前需要调用NewMediaData获取一个media_data,在使用完media_data中数据后,还需要调用FreeMediaData释放。
|
|
|
-// long media_data = Finance.NewMediaData();
|
|
|
-// ret = Finance.GetMediaData(sdk, indexbuf, sdkfileid, proxy, passwd, timeout, media_data);
|
|
|
-// if(ret!=0){
|
|
|
-// System.out.println("getmediadata ret:" + ret);
|
|
|
-// Finance.FreeMediaData(media_data);
|
|
|
-// return null;
|
|
|
-// }
|
|
|
-// System.out.printf("getmediadata outindex len:%d, data_len:%d, is_finis:%d\n",
|
|
|
-// Finance.GetIndexLen(media_data),
|
|
|
-// Finance.GetDataLen(media_data),
|
|
|
-// Finance.IsMediaDataFinish(media_data));
|
|
|
-// try {
|
|
|
-// //大于512k的文件会分片拉取,此处需要使用追加写,避免后面的分片覆盖之前的数据。
|
|
|
-// FileOutputStream outputStream = new FileOutputStream(new File(savefile), true);
|
|
|
-// outputStream.write(Finance.GetData(media_data));
|
|
|
-// outputStream.close();
|
|
|
-// } catch (Exception e) {
|
|
|
-// e.printStackTrace();
|
|
|
-// }
|
|
|
-//
|
|
|
-// if(Finance.IsMediaDataFinish(media_data) == 1)
|
|
|
-// {
|
|
|
-// //已经拉取完成最后一个分片
|
|
|
-// Finance.FreeMediaData(media_data);
|
|
|
-// break;
|
|
|
-// }
|
|
|
-// else
|
|
|
-// {
|
|
|
-// //获取下次拉取需要使用的indexbuf
|
|
|
-// indexbuf = Finance.GetOutIndexBuf(media_data);
|
|
|
-// Finance.FreeMediaData(media_data);
|
|
|
-// }
|
|
|
-// }
|
|
|
+
|
|
|
|
|
|
|
|
|
|
|
|
@@ -236,6 +160,74 @@ public class ConversationContentServiceImpl implements ConversationContentServic
|
|
|
return map;
|
|
|
}
|
|
|
|
|
|
+ private String pushFileUrl(long sdk, long ret, com.alibaba.fastjson.JSONObject jsonObject) {
|
|
|
+ String url = uploadPath;
|
|
|
+ String sdkfileid=null;
|
|
|
+ String msgtype = jsonObject.getString("msgtype");
|
|
|
+ if (msgtype.equals("file")){
|
|
|
+ com.alibaba.fastjson.JSONObject file = jsonObject.getJSONObject("file");
|
|
|
+ String filename = file.getString("filename");
|
|
|
+ sdkfileid = file.getString("sdkfileid");
|
|
|
+ try {
|
|
|
+ String osname = System.getProperties().getProperty("os.name");
|
|
|
+ if (osname.contains("Windows")) {
|
|
|
+ filename = new String(filename.getBytes("GBK"),"UTF-8");
|
|
|
+ String safeName=filename.replaceAll("[<>:\"/\\\\|?*,、]", "_");
|
|
|
+ url = url +"/wechat/"+ safeName;
|
|
|
+ }
|
|
|
+ } catch (UnsupportedEncodingException e) {
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+ }else if (msgtype.equals("image")){
|
|
|
+ url = url +"/wechat/"+ System.currentTimeMillis()+".jpg";
|
|
|
+ com.alibaba.fastjson.JSONObject image = jsonObject.getJSONObject("image");
|
|
|
+ sdkfileid = image.getString("sdkfileid");
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ String indexbuf = "";
|
|
|
+ while(true){
|
|
|
+ //每次使用GetMediaData拉取存档前需要调用NewMediaData获取一个media_data,在使用完media_data中数据后,还需要调用FreeMediaData释放。
|
|
|
+ long media_data = Finance.NewMediaData();
|
|
|
+ ret = Finance.GetMediaData(sdk, indexbuf, sdkfileid, null, null, 3, media_data);
|
|
|
+ if(ret!=0){
|
|
|
+ System.out.println("getmediadata ret:" + ret);
|
|
|
+ Finance.FreeMediaData(media_data);
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ System.out.printf("getmediadata outindex len:%d, data_len:%d, is_finis:%d\n",Finance.GetIndexLen(media_data),Finance.GetDataLen(media_data), Finance.IsMediaDataFinish(media_data));
|
|
|
+ try {
|
|
|
+
|
|
|
+ File file = new File(url);
|
|
|
+ if (!file.getParentFile().exists()) {
|
|
|
+ file.getParentFile().mkdirs(); // 自动创建缺失的父目录
|
|
|
+ }
|
|
|
+ //大于512k的文件会分片拉取,此处需要使用追加写,避免后面的分片覆盖之前的数据。
|
|
|
+ FileOutputStream outputStream = new FileOutputStream(url, true);
|
|
|
+ outputStream.write(Finance.GetData(media_data));
|
|
|
+ outputStream.close();
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+
|
|
|
+ if(Finance.IsMediaDataFinish(media_data) == 1)
|
|
|
+ {
|
|
|
+ //已经拉取完成最后一个分片
|
|
|
+ Finance.FreeMediaData(media_data);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ //获取下次拉取需要使用的indexbuf
|
|
|
+ indexbuf = Finance.GetOutIndexBuf(media_data);
|
|
|
+ Finance.FreeMediaData(media_data);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return url;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
@Override
|
|
|
public String getAccessToken() {
|
|
|
//获取redis缓存数据
|
|
|
@@ -393,7 +385,9 @@ public class ConversationContentServiceImpl implements ConversationContentServic
|
|
|
}else {
|
|
|
System.out.println("获取外部群名称失败");
|
|
|
}
|
|
|
- }else {
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
//https://qyapi.weixin.qq.com/cgi-bin/msgaudit/groupchat/get
|
|
|
String url=String.format("https://qyapi.weixin.qq.com/cgi-bin/msgaudit/groupchat/get?access_token=%s",getAccessToken());
|
|
|
Map<String,Object> map = new HashMap<String, Object>();
|