开发者社区> 问答> 正文

企业微信上传临时素材接口报错,"errcode": 44001,上传格式参考:上?400报错

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

"data": {
        "errcode": 44001,
        "errmsg": "empty media data, hint: [1581644485_47_9488967654d7c1b5624704ac277438ea], from ip: 183.14.132.50, more info at https://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();
    }

展开
收起
爱吃鱼的程序员 2020-06-05 14:31:51 2284 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
微信广告引擎与播放节奏算法实践 立即下载
微信H5视频播放器在海量业务下的实践 立即下载
微信高效运维之路 立即下载

相关实验场景

更多