文档章节

微信视频素材上传

葉者
 葉者
发布于 2017/03/28 15:27
字数 844
阅读 36
收藏 0

#来自转载文章#

 

 

 

 

    /** 
     * 在上传视频素材的时候,微信限制不超过20M 
     * 实测超过10M调通的可能性都比较小
     * 建议大家上传视频素材的大小小于10M比交好 
     * @param accessToken 
     * @param file  上传的文件 
     * @param title  上传类型为video的参数 
     * @param introduction 上传类型为video的参数 
     */  
    public void uploadPermanentMedia2(String accessToken, File file, String title, String introduction) {  
        try {  
              
            //这块是用来处理如果上传的类型是video的类型的  
            JSONObject j=new JSONObject();  
            j.put("title", title);  
            j.put("introduction", introduction);  
              
            // 拼装请求地址  
            String uploadMediaUrl = "http://api.weixin.qq.com/cgi-bin/material/add_material?access_token=##ACCESS_TOKEN##";  
            uploadMediaUrl = uploadMediaUrl.replace("##ACCESS_TOKEN##",  
                    accessToken);  
  
            URL url = new URL(uploadMediaUrl);  
            String result = null;  
            long filelength = file.length();  
            String fileName=file.getName();  
            String suffix=fileName.substring(fileName.lastIndexOf("."),fileName.length());  
            String type="video/mp4"; //我这里写死  
            /** 
             *  你们需要在这里根据文件后缀suffix将type的值设置成对应的mime类型的值 
             */  
            HttpURLConnection con = (HttpURLConnection) url.openConnection();  
            con.setRequestMethod("POST"); // 以Post方式提交表单,默认get方式  
            con.setDoInput(true);  
            con.setDoOutput(true);  
            con.setUseCaches(false); // post方式不能使用缓存  
            // 设置请求头信息  
            con.setRequestProperty("Connection", "Keep-Alive");  
            con.setRequestProperty("Charset", "UTF-8");  
              
            // 设置边界,这里的boundary是http协议里面的分割符,不懂的可惜百度(http 协议 boundary),这里boundary 可以是任意的值(111,2222)都行  
            String BOUNDARY = "----------" + System.currentTimeMillis();  
            con.setRequestProperty("Content-Type",  
                    "multipart/form-data; boundary=" + BOUNDARY);  
            // 请求正文信息  
            // 第一部分:  
              
            StringBuilder sb = new StringBuilder();  
              
              
              
            //这块是post提交type的值也就是文件对应的mime类型值  
            sb.append("--"); // 必须多两道线 这里说明下,这两个横杠是http协议要求的,用来分隔提交的参数用的,不懂的可以看看http 协议头  
            sb.append(BOUNDARY);  
            sb.append("\r\n");  
            sb.append("Content-Disposition: form-data;name=\"type\" \r\n\r\n"); //这里是参数名,参数名和值之间要用两次  
            sb.append(type+"\r\n"); //参数的值  
              
            //这块是上传video是必须的参数,你们可以在这里根据文件类型做if/else 判断  
            sb.append("--"); // 必须多两道线  
            sb.append(BOUNDARY);  
            sb.append("\r\n");  
            sb.append("Content-Disposition: form-data;name=\"description\" \r\n\r\n");  
            sb.append(j.toString()+"\r\n");  
              
            /** 
             * 这里重点说明下,上面两个参数完全可以卸载url地址后面 就想我们平时url地址传参一样, 
             * http://api.weixin.qq.com/cgi-bin/material/add_material?access_token=##ACCESS_TOKEN##&type=""&description={} 这样,如果写成这样,上面的 
             * 那两个参数的代码就不用写了,不过media参数能否这样提交我没有试,感兴趣的可以试试 
             */  
              
            sb.append("--"); // 必须多两道线  
            sb.append(BOUNDARY);  
            sb.append("\r\n");  
            //这里是media参数相关的信息,这里是否能分开下我没有试,感兴趣的可以试试  
            sb.append("Content-Disposition: form-data;name=\"media\";filename=\""  
                    + fileName + "\";filelength=\"" + filelength + "\" \r\n");  
            sb.append("Content-Type:application/octet-stream\r\n\r\n");  
            System.out.println(sb.toString());  
            byte[] head = sb.toString().getBytes("utf-8");  
            // 获得输出流  
            OutputStream out = new DataOutputStream(con.getOutputStream());  
            // 输出表头  
            out.write(head);  
            // 文件正文部分  
            // 把文件已流文件的方式 推入到url中  
            DataInputStream in = new DataInputStream(new FileInputStream(file));  
            int bytes = 0;  
            byte[] bufferOut = new byte[1024];  
            while ((bytes = in.read(bufferOut)) != -1) {  
                out.write(bufferOut, 0, bytes);  
            }  
            in.close();  
            // 结尾部分,这里结尾表示整体的参数的结尾,结尾要用"--"作为结束,这些都是http协议的规定  
            byte[] foot = ("\r\n--" + BOUNDARY + "--\r\n").getBytes("utf-8");// 定义最后数据分隔线  
            out.write(foot);  
            out.flush();  
            out.close();  
            StringBuffer buffer = new StringBuffer();  
            BufferedReader reader = null;  
            // 定义BufferedReader输入流来读取URL的响应  
            reader = new BufferedReader(new InputStreamReader(con.getInputStream()));  
            String line = null;  
            while ((line = reader.readLine()) != null) {  
                buffer.append(line);  
            }  
            if (result == null) {  
                result = buffer.toString();  
            }  
            // 使用JSON-lib解析返回结果  
            JSONObject jsonObject = JSONObject.fromObject(result);  
            if (jsonObject.has("media_id")) {  
                System.out.println("media_id:"+jsonObject.getString("media_id"));  
            } else {  
                System.out.println(jsonObject.toString());  
            }  
            System.out.println("json:"+jsonObject.toString());  
        } catch (IOException e) {  
            e.printStackTrace();  
        } finally {  
  
        }  
    }  

本文转载自:

葉者
粉丝 2
博文 21
码字总数 8118
作品 0
厦门
后端工程师
私信 提问
微信永久素材上传视频并通过mediaid获取微信url调用视频

今天解决一个调用微信永久素材上传视频的问题,在网上查了很久,上传视频的接口写的都不一样而且到处复制,感觉很乱,于是在做完case之后做了一个整理,希望能够帮助到你们. 涉及到如何调用微...

wsy940822
2016/03/28
3.2K
1
C#开发微信门户及应用(26)-公众号微信素材管理

微信公众号最新修改了素材的管理模式,提供了两类素材的管理:临时素材和永久素材的管理,原先的素材管理就是临时素材管理,永久素材可以永久保留在微信服务器上,微信素材可以在上传后,进行...

walb呀
2017/12/04
0
0
微信开发学习总结(三)——开发微信公众号的最基本功能——普通消息的接收和回复

一、微信公众平台消息管理接口介绍   要实现微信公众号的普通消息的接收和回复,我们需要先熟悉微信公众平台API中消息接口部分,点此进入,点击后将进入到【消息管理】部分,如下图所示: ...

哒哒成晨
05/14
26
0
PHP版微信权限验证配置,音频文件下载,FFmpeg转码,上传OSS和删除转存服务器本地文件

一、概述和通过config接口注入权限验证配置 由于微信的(如:录音文件)上传到微信服务器上,。而我们需要长期保存,我们需要把资源从微信服务器转存到自己服务器,或者阿里云OSS/七牛云。 ...

Jack088
2018/04/14
64
1
微信素材管理接口

素材管理接口 回复图片消息 回复语音消息 回复视频消息 回复音乐消息 在回复这些是需要媒体需要这个选项 此选项通过素材管理接口上传多媒体文件,得到 上传多媒体文件 公众号可调用本接口来上...

金于虎
2016/11/03
34
0

没有更多内容

加载失败,请刷新页面

加载更多

哪些情况下适合使用云服务器?

我们一直在说云服务器价格适中,具备弹性扩展机制,适合部署中小规模的网站或应用。那么云服务器到底适用于哪些情况呢?如果您需要经常原始计算能力,那么使用独立服务器就能满足需求,因为他...

云漫网络Ruan
今天
10
0
Java 中的 String 有没有长度限制

转载: https://juejin.im/post/5d53653f5188257315539f9a String是Java中很重要的一个数据类型,除了基本数据类型以外,String是被使用的最广泛的了,但是,关于String,其实还是有很多东西...

低至一折起
今天
23
0
OpenStack 简介和几种安装方式总结

OpenStack :是一个由NASA和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目。项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenSta...

小海bug
昨天
11
0
DDD(五)

1、引言 之前学习了解了DDD中实体这一概念,那么接下来需要了解的就是值对象、唯一标识。值对象,值就是数字1、2、3,字符串“1”,“2”,“3”,值时对象的特征,对象是一个事物的具体描述...

MrYuZixian
昨天
9
0
解决Mac下VSCode打开zsh乱码

1.乱码问题 iTerm2终端使用Zsh,并且配置Zsh主题,该主题主题需要安装字体来支持箭头效果,在iTerm2中设置这个字体,但是VSCode里这个箭头还是显示乱码。 iTerm2展示如下: VSCode展示如下: 2...

HelloDeveloper
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部