微信公众平台上传/下载多媒体文件_优品建站

微信公众平台上传/下载多媒体文件

  多媒体文件往往较大,公众号发给微信服务器,微信服务器再转发给用户,这样速度会很慢,影响用户体验,而且往往文件会发送给很多用户,每次上传或下载就显得没有必要。一次上传到微信服务器,获得文件的全局唯一ID,以后只要告诉微信服务器发给用户某ID的文件,减少了中间环节,还不受开发者自身服务器带宽的限制,很好地提升了用户体验。但开发者不要高兴得太早,微信服务器只会为我们保存3天,3天后就会自动删除,毕竟存储不是免费的,地主家也没有余粮啊!
一. 上传多媒体文件
1.接口说明
  微信公众平台将语音、图片、视频这些大体量的文件称之为多媒体文件,这些文件都是以media_id的形式进行信息传递的。当公众号调用接口将多媒体文件上传到微信服务器或用户发送多媒体文件时,微信服务器都会返回对应的media_id,公众号此后可根据该media_id获取多媒体文件。meidia_id是可以复用的。本接口利用HTTP POST/FORM方式提交请求。
请求地址是:
  http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE
参数说明如表5-2所示。
表5-2 参数说明

其中,access_token和type是在URL中传递的,而media是通过表单提交的。
需要注意,上传的多媒体文件有格式和大小限制:
图片(image)128KB,支持JPG格式。
语音(voice)256KB,播放长度不超过60秒,支持AMR/MP3格式。
视频(video)1MB,支持MP4格式。
缩略图(thumb)64KB,支持JPG格式。
如果上传thumb文件,那么返回的JSON数据结构是:

     {"type":"thumb","thumb_media_id":"MEDIA_ID","created_at":123456789}
如果上传的是其他类型的多媒体文件,那么返回的JSON数据结构是:

     {"type":"TYPE","media_id":"MEDIA_ID","created_at":123456789}
2.接口封装
接口封装代码如下:

    /**
         *上传多媒体
         * @param {string} $type
         * @param {string} $file_path
         * @param {int} $mediaidOnly
         * @return null
         */
        public static function upload( $type, $file_path){
            $access_token = self::getToken();
            $url = "http://file.api.weixin.qq.com/cgi-bin/media/ upload?access_token=$access_token&type=
$type";


            $ret = curl_post( $url, array( 'media' => "@$file_path" ) );
            $ret = json_decode( $ret, true );
            if( self::getResult( $ret) ){
                return $type == 'thumb' ? $ret['thumb_media_id'] : $ret['media_id'];
            }
return null;
    }
    private function testUpload()
    {
        $ret = self::upload('image','location.jpg');
        $this->outputText("type : image\nmedia_id : ".$ret);
    }
二. 下载多媒体文件
1.接口说明
如果公众号想获取多媒体文件,那么可以通过“下载多媒体文件”接口实现。注意,视频文件不支持下载。该接口使用HTTP GET方式提交请求,请求地址是:
http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=ACCESS_TOKEN&media_id=MEDIA_ID
下载完后需要将文件保存起来,SAE提供了存储服务Storage,利用它开放的API可以将文件存到SAE中,如图5-3所示。
图5-3
SAE Storage有域的概念,可以理解为一级目录,是对外管理的单位,同一域下面的所有目录拥有相同的属性(访问权限和防盗链)。
SAE Storage提供PHP类SaeStorage,所有的读写访问接口都包含在里面。API文档在这里:http://apidoc.sinaapp.com/sae/SaeStorage.html
主要需要写文件接口:

    string write (string $domain, string $destFileName, string $content, [int $size = -1], [array $attr = array()],
[bool $compress = false])
$domain:存储域,这里是huoyaxiaotu。
$destFileName:文件名,包含域下面的目录路径。
$content:文件内容,支持二进制数据。
$size:写入长度,默认为不限制。
$attr:文件属性,可设置的属性参考SaeStorage::setFileAttr()方法。
$compress:是否gzip压缩。如果设为true,文件就会经过gzip压缩后再存入Storage,常与$attr=array('encoding'=>'gzip')联合使用。
2.接口封装
接口封装代码如下:

    /**
         *下载多媒体内容
         * @param {string} $media_id
         * @return type
         */
        public static function download( $media_id ){
            $access_token = self::getToken();
            $url = "http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=
{$access_token}&media_id={$media_id}";
            $ret = curl_get( $url );
            $s = new SaeStorage();
            return $s->write("huoyaxiaotu","/image/download.jpg",$ret);
    }
5.2.3 测试案例
我们需要先将多媒体文件上传到SAE服务器中,上传后得到media_id。然后根据media_id将图片下载下来并存到SAE里,得到图片的链接。
private function testDownload()
    {
        $ret = self::download('dHhva6uzRyAfZrJ4JQ7Ze22-
IZcZRX9eSazEhHo37oIxIYfS9vSpfYxUPyNQxDLF');
        $this->outputText("type : image\npath in SAE Storage : ".$ret);
    }
运行结果如图5-4所示。
图5-4

  • 微信公众号开发:Access Token和自定义菜单
    Access Token是调用其他高级接口的“钥匙”,自定义菜单是微信开放的首个高级接口。为了方便读者更好地理解它们的原理及机制,因此将它们放在同一章讲解。
  • 微信公众号生成带参数的二维码源代码教程
    为了满足用户渠道推广分析的需要,公众平台提供了生成二维码的接口。使用该接口可以获得多个带不同场景值的二维码,用户扫描后,公众号可以接收到事件推送。
  • 微信开发者工具配置失败常见问题与分析
    提交URL和Token的时候,有时会碰到提交不成功的情况,具体有1.请求URL超时;2.系统发生错误,请稍后重试;3.Token验证失败
  • uniapp开发微信小程序如何引用animate.css
    最近用uniapp开发微信小程序的过程中想引用animate.css,下面是引用方法。
  • 网站制作的基础:版面设计与内容的有效结合
    随着互联网的发展,网站制作的版面设计变得越来越重要。访问者不想再看到只提供内容的网站。虽然内容很重要,但是只有把网站做好了,把网站的内容与版面设计有效结合起来,这种网站和站点才容易被人接受。
  • javascript实践案例:网页计算器
    网页计算器在Web开发中是很常见的功能。下面利用JavaScript中的函数,完成整数加、减、乘、除的运算,实现一个简易版的计算器。
  • 网站设计制作关键环节就是确定网站界面
    界面就是网站给浏览者的第一印象,往往决定着网站的可看性,在确定网站的界面时要注意以下三点:1.栏目与板块编排,2.目录结构与链接结构,3.进行形象设计。
  • 集成基于Promise的工具及Promise的用法
    我们要解释一下最后一条规则“如果一个工具会返回Promise,那么你就不需要这个工具的插件”,以免你还没听说过Promise。总体而言,Promise是一种用同步的方法来处理异步结果的方法。听起来很难懂?好吧,也许是有点。先剧透一下:Promise可以非常好地集成到Gulp task系统中
  • 网站建设如何选择和优化网站域名
    网站建设的第一步就是要注册域名,域名就相当于是实体店的地址,选址非常的重要。那么如何去选择域名更有利于网站优化和推广呢?本文就向大家详细介绍选择域名需要注意那些事项。
  • 网站制作具体流程及六大步骤是什么?
    网站制作是一个综合性极强的工作,涉及到商业策划、平面设计、人机界面、程序语言和数据库等,本文介绍网站制作六大步骤。
  • 网站制作 服务

    免费网站制作报价,免费优化,1对1服务,个性化定制服务

    pc和wap网站制作

    多年建站经验,上千个成功案例,
    为您提供一站式服务

    网站维护改版

    大厂经验工程师对现有网站进行
    改版,修复,维护。

    小程序制作

    微信小程序,支付宝小程序,
    百度小程序

    响应式网页设计

    响应式网页设计可以与多种设备兼容,
    如智能手机,平板电脑和PC