企业微信上传临时素材接口报错,"errcode": 44001,上传格式参考:上传临时素材,确认header和body的内容正确。

Derrick_Wong 发布于 02/14 14:28
阅读 50
收藏 0

我这代码有啥毛病啊 ,一直报错 

"data": {
        "errcode": 44001,
        "errmsg": "empty media data, hint: [1581644485_47_9488967654d7c1b5624704ac277438ea], from ip: 183.14.132.50, more info at http://open.work.weixin.qq.com/devtool/query?e=44001"
    }  

 

public static String FileHttpRequest(String uploadMaterialUrl, MultipartFile multipartFile) {
        //// uploadMaterialUrl 微信上传素材的url multipartFile是上传的文件
        StringBuffer buffer = new StringBuffer();

        try {
            // 1.建立连接
            URL url = new URL(uploadMaterialUrl);
            HttpURLConnection httpUrlConn = (HttpURLConnection)url.openConnection(); // 打开链接

            // 1.1输入输出设置
            httpUrlConn.setDoInput(true);
            httpUrlConn.setDoOutput(true);
            httpUrlConn.setUseCaches(false); // post方式不能使用缓存
            // 1.2设置请求头信息
            httpUrlConn.setRequestProperty("Connection", "Keep-Alive");
            httpUrlConn.setRequestProperty("Charset", "UTF-8");
            // 1.3设置边界
            String BOUNDARY = "----------" + System.currentTimeMillis();
            httpUrlConn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);

            // 请求正文信息
            // 第一部分:
            // 2.将文件头输出到微信服务器
            StringBuilder sb = new StringBuilder();
            sb.append("--"); // 必须多两道线
            sb.append(BOUNDARY);
            sb.append("\r\n");
            sb.append("Content-Disposition: form-data;name=\"media\";filelength=\"" + 6 + "\";filename=\""
                + multipartFile.getOriginalFilename() + "\"\r\n");
            sb.append("Content-Type:application/octet-stream\r\n\r\n");
            byte[] head = sb.toString().getBytes("utf-8");
            // 获得输出流
            OutputStream outputStream = new DataOutputStream(httpUrlConn.getOutputStream());
            // 将表头写入输出流中:输出表头
            outputStream.write(head);

            // 3.将文件正文部分输出到微信服务器
            // 把文件以流文件的方式 写入到微信服务器中
            InputStream in = multipartFile.getInputStream();
            int bytes = 0;
            byte[] bufferOut = new byte[1024];
            while ((bytes = in.read(bufferOut)) != -1) {
                outputStream.write(bufferOut, 0, bytes);
            }
            in.close();
            // 4.将结尾部分输出到微信服务器
            byte[] foot = ("\r\n--" + BOUNDARY + "--\r\n").getBytes("utf-8");// 定义最后数据分隔线
            outputStream.write(foot);
            outputStream.flush();
            outputStream.close();
            // 5.将微信服务器返回的输入流转换成字符串
            InputStream inputStream = httpUrlConn.getInputStream();
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

            String str = null;
            while ((str = bufferedReader.readLine()) != null) {
                buffer.append(str);
            }

            bufferedReader.close();
            inputStreamReader.close();
            // 释放资源
            inputStream.close();
            inputStream = null;
            httpUrlConn.disconnect();

        } catch (Exception e) {
            System.out.println("Weixin server upload material faild:" + e);
        }
        return buffer.toString();
    }

加载中
0
f
freezingsky

9822.com_【官方首页】-澳门金沙用postman直接调试,另外 ,换个http 操作库吧。

Derrick_Wong
Derrick_Wong
是用的postmain调试的 换了几个http工具方法了 都是报这样的错 都是说那个请求头封装的body参数不对,气死了。
0
Derrick_Wong
Derrick_Wong

9822.com_【官方首页】-澳门金沙是用的postmain调试的 换了几个http工具方法了 都是报这样的错 都是说那个请求头封装的body参数不对,气死了。

0
大魔大天王
大魔大天王

你传的参数和人家要的参数不一样啊,这还不明显吗,人家已经明确告诉你请求头或者请求参数不对

返回顶部
顶部

页面底部区域 foot.htm