⼩程序客服消息新增临时素材接⼝java实现
今天想在⼩程序的客服信息窗⼝⾥回复⽤户⼀个图⽚信息,发现还需要上传素材,但是⽂档的上传临时素材接⼝写的模模糊糊,⽆奈去百度,⽹上清⼀⾊的PHP实现⽅式,难道我穿越了?PHP已经把java给超越了?
⾔归正传,终于还是到了⼀篇博客的,java实现。现摘录如下,做了⼩部分修改:
1/**
2    * 新增临时素材
3    *
4    * @param fileType
5    * @param filePath
6    * @return
7    * @throws Exception
8*/
9public static JSONObject UploadMeida(String fileType, String filePath) throws Exception {
10// 返回结果
11        String result = null;
12        File file = new File(filePath);
13if (!ists() || !file.isFile()) {
14            logger.info("⽂件不存在");
15throw new IOException("⽂件不存在");
16        }
17        String token = getToken();
18if (token == null) {
19            logger.info("未获取到token");
20throw new IOException("未获取到token");
21        }
22        String urlString = Constants.WX_APP_place("ACCESS_TOKEN", token).replace("TYPE", fileType);
23        URL url = new URL(urlString);
24        HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
25        conn.setRequestMethod("POST");// 以POST⽅式提交表单
26        conn.setDoInput(true);
27        conn.setDoOutput(true);
28        conn.setUseCaches(false);// POST⽅式不能使⽤缓存
29// 设置请求头信息
30        conn.setRequestProperty("Connection", "Keep-Alive");
31        conn.setRequestProperty("Charset", "UTF-8");
32// 设置边界
33        String BOUNDARY = "----------" + System.currentTimeMillis();
34        conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);
35// 请求正⽂信息
36// 第⼀部分
37        StringBuilder sb = new StringBuilder();
38        sb.append("--");// 必须多两条道
39        sb.append(BOUNDARY);
40        sb.append("\r\n");
41        sb.append("Content-Disposition: form-data;name=\"media\"; filename=\"" + Name() + "\"\r\n");
42        sb.append("Content-Type:application/octet-stream\r\n\r\n");
43        logger.debug("sb:" + sb);
44
45// 获得输出流
46        OutputStream out = new OutputStream());
47// 输出表头
48        out.String().getBytes("UTF-8"));
49// ⽂件正⽂部分
50// 把⽂件以流的⽅式推送道URL中
51        DataInputStream din = new DataInputStream(new FileInputStream(file));
52int bytes = 0;
53byte[] buffer = new byte[1024];
54while ((bytes = ad(buffer)) != -1) {
55            out.write(buffer, 0, bytes);
56        }
57        din.close();
58// 结尾部分
59byte[] foot = ("\r\n--" + BOUNDARY + "--\r\n").getBytes("UTF-8");// 定义数据最后分割线
60        out.write(foot);
61        out.flush();
62        out.close();
63if (HttpsURLConnection.HTTP_OK == ResponseCode()) {
64
65            StringBuffer strbuffer = null;
66            BufferedReader reader = null;
67try {
68                strbuffer = new StringBuffer();
69                reader = new BufferedReader(new InputStream()));
70                String lineString = null;
71while ((lineString = adLine()) != null) {
有趣的java小程序72                    strbuffer.append(lineString);
73
74                }
75if (result == null) {
76                    result = String();
77                    logger.info("result:" + result);
78                }
79            } catch (IOException e) {
80                ("发送POST请求出现异常!", e);
81                e.printStackTrace();
82            } finally {
83if (reader != null) {
84                    reader.close();
85                }
86            }
87
88        }
89        JSONObject jsonObject = JSONObject.parseObject(result);
90return jsonObject;
91
92    }
使⽤的时候直接本地执⾏⼀个main⽅法就OK的
1/**
2    * 上传素材,⽤于获取media_id
3    * @param args
4*/
5public static void main(String[] args) {
6
7        String fileType = "image";
8        String filePath = "E:/testupload/123456.jpg";
9try {
10            JSONObject jsonObject = UploadMeida(fileType, filePath);
11            println(jsonObject);
12        } catch (Exception e) {
13            e.printStackTrace();
14        }
15    }
其实后来这个临时素材不满⾜需求的,因为⽹上说的这种临时素材好像3天就会过期,反正⽂档是啥也没说,只说这是临时素材,囧!我想个⼩程序的永久素材接⼝,然⽽并没有到。只能改⽤图⽂链接回复了,把链接指向⾃⼰服务器上的⼀个图⽚。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。