1 微信公众账号在回复图片、语音、视频的时候,将使用media_id来调用相关文件,很多朋友咨询这个如何开发实现。本文将介绍在微信公众平台开发过程中,如何上传下载多媒体文件。 2 3 4 5 一、上传多媒体文件 6 7 公众号可调用本接口来上传图片、语音、视频等文件到微信服务器,上传后服务器会返回对应的media_id,公众号此后可根据该media_id来获取多媒体。请注意,media_id是可复用的,调用该接口需http协议。 8 9 通常,文件上传是通过html表单进行的,但通过CURL可以不经过浏览器,直接在服务器端进行表单的POST提交,完成文件上传功能。 10 11 需要注意的是:文件名必须是完整绝对路径,另外需要绝对路径前加上“@”以示区分。 12 13 在Windows服务器上,格式示例为:”@F:israeluploadwinter.jpg”,而在Linux服务器上,格式示例为:”@home/israel/upload/winter.jpg”。 14 15 http请求方式: POST/FORM 16 17 http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE 18 19 参数说明 20 21 参数 22 23 24 是否必须 25 26 27 说明 28 29 access_token 30 31 32 是 33 34 35 调用接口凭证 36 37 type 38 39 40 是 41 42 43 媒体文件类型,分别有图片(image)、语音(voice)、视频(video)和缩略图(thumb) 44 45 media 46 47 48 是 49 50 51 form-data中媒体文件标识,有filename、filelength、content-type等信息 52 53 上传图片
54 55 返回结果 56 57 { 58 "type": "image", 59 "media_id": "QQ9nj-7ctrqA8t3WKU3dQN24IuFV_516MfZRZNnQ0c-BFVkk66jUkPXF49QE9L1l", 60 "created_at": 1389793969 61 } 62 63 64 65 上传语音
66 67 返回结果 68 69 { 70 "type": "voice", 71 "media_id": "5Idx79V9E3XfBCz_A50gr1a1_klgPpJnb_eq73yz0bn-prhIsNlwI3n6jQgshmWk", 72 "created_at": 1389794760 73 } 74 75 76 77 上传视频 78
79 80 81 返回结果 82 83 { 84 "type": "video", 85 "media_id": "Jm-Wq0nXtA_oN1qNydQRP03dCsB0R2t5gCHDM3QNkBmMRE1WBaorVJNQTBRHvK9-", 86 "created_at": 1389794768 87 } 88 89 上传缩略图
90 91 返回结果 92 93 { 94 "type": "thumb", 95 "thumb_media_id": "2RhP0caRKHVOmZO5AKelHkK--vqPPwgUaRp5-WE63dvmmPRWiYVKgvNblIp_gv79", 96 "created_at": 1389794771 97 } 98 99 参数说明 100 101 参数 102 103 104 描述 105 106 type 107 108 109 媒体文件类型,分别有图片(image)、语音(voice)、视频(video)和缩略图(thumb,主要用于视频与音乐格式的缩略图) 110 111 media_id 112 113 114 媒体文件上传后,获取时的唯一标识 115 116 created_at 117 118 119 媒体文件上传时间戳 120 121 注意事项 122 123 上传的多媒体文件有格式和大小限制,如下: 124 125 图片(image): 128K,支持JPG格式 126 127 语音(voice):256K,播放长度不超过60s,支持AMRMP3格式 128 129 视频(video):1MB,支持MP4格式 130 131 缩略图(thumb):64KB,支持JPG格式 132 133 媒体文件在后台保存时间为3天,即3天后media_id失效。对于需要重复使用的多媒体文件,可以每3天循环上传一次,更新media_id。 134 135 136 137 二、下载多媒体文件 138 139 公众号可调用本接口来获取多媒体文件。请注意,视频文件不支持下载,调用该接口需http协议。 140 141 下载文件使用获取图片数据,写入新文件的方法。 142 143 http请求方式: GET 144 145 http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=ACCESS_TOKEN&media_id=MEDIA_ID 146 147 参数说明 148 149 参数 150 151 152 是否必须 153 154 155 说明 156 157 access_token 158 159 160 是 161 162 163 调用接口凭证 164 165 media_id 166 167 168 是 169 170 171 媒体文件ID 172 173 174 175 下载图片
176 177 代码实现 178 179 返回HTTP头示例如下 18181 182 { 183 "url": "http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=My4oqLEyFVrgFF-XOZagdvbTt9XywYjGwMg_GxkPwql7-f0BpnvXFCOKBUyAf0agmZfMChW5ECSyTAgAoaoU2WMyj7aVHmB17ce4HzLRZ3XFTbm2vpKt_9gYA29xrwIKpnvH-BYmNFSddt7re5ZrIg&media_id=QQ9nj-7ctrqA8t3WKU3dQN24IuFV_516MfZRZNnQ0c-BFVkk66jUkPXF49QE9L1l", 184 "content_type": "image/jpeg", 185 "http_code": 200, 186 "header_size": 308, 187 "request_size": 316, 188 "filetime": -1, 189 "ssl_verify_result": 0, 190 "redirect_count": 0, 191 "total_time": 1.36, 192 "namelookup_time": 1.016, 193 "connect_time": 1.078, 194 "pretransfer_time": 1.078, 195 "size_upload": 0, 196 "size_download": 105542, 197 "speed_download": 77604, 198 "speed_upload": 0, 199 "download_content_length": 105542, 200 "upload_content_length": 0, 201 "starttransfer_time": 1.141, 202 "redirect_time": 0 203 } 204 205206 207 208 209 下载语音
210 211 代码实现 212 213 返回HTTP头如下 214 215 216 { 217 "url": "http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=My4oqLEyFVrgFF-XOZagdvbTt9XywYjGwMg_GxkPwql7-f0BpnvXFCOKBUyAf0agmZfMChW5ECSyTAgAoaoU2WMyj7aVHmB17ce4HzLRZ3XFTbm2vpKt_9gYA29xrwIKpnvH-BYmNFSddt7re5ZrIg&media_id=5Idx79V9E3XfBCz_A50gr1a1_klgPpJnb_eq73yz0bn-prhIsNlwI3n6jQgshmWk", 218 "content_type": "audio/amr", 219 "http_code": 200, 220 "header_size": 306, 221 "request_size": 316, 222 "filetime": -1, 223 "ssl_verify_result": 0, 224 "redirect_count": 0, 225 "total_time": 0.125, 226 "namelookup_time": 0.031, 227 "connect_time": 0.063, 228 "pretransfer_time": 0.063, 229 "size_upload": 0, 230 "size_download": 10470, 231 "speed_download": 83760, 232 "speed_upload": 0, 233 "download_content_length": 10470, 234 "upload_content_length": 0, 235 "starttransfer_time": 0.125, 236 "redirect_time": 0 237 } 238 239240 241 可以看出,MP3的语音格式被压缩成AMR格式了。 242 243 244 245 下载缩略图
246 247 实现代码 248 249 返回HTTP头如下 250 251 252 { 253 "url": "http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=My4oqLEyFVrgFF-XOZagdvbTt9XywYjGwMg_GxkPwql7-f0BpnvXFCOKBUyAf0agmZfMChW5ECSyTAgAoaoU2WMyj7aVHmB17ce4HzLRZ3XFTbm2vpKt_9gYA29xrwIKpnvH-BYmNFSddt7re5ZrIg&media_id=2RhP0caRKHVOmZO5AKelHkK--vqPPwgUaRp5-WE63dvmmPRWiYVKgvNblIp_gv79", 254 "content_type": "image/jpeg", 255 "http_code": 200, 256 "header_size": 306, 257 "request_size": 316, 258 "filetime": -1, 259 "ssl_verify_result": 0, 260 "redirect_count": 0, 261 "total_time": 0.094, 262 "namelookup_time": 0, 263 "connect_time": 0.047, 264 "pretransfer_time": 0.047, 265 "size_upload": 0, 266 "size_download": 6057, 267 "speed_download": 64436, 268 "speed_upload": 0, 269 "download_content_length": 6057, 270 "upload_content_length": 0, 271 "starttransfer_time": 0.094, 272 "redirect_time": 0 273 } 274 2276 277 至于回复相应的消息,就是利用消息接口或者客服接口,构造成相应的消息就行了,和构造文本,图文消息的方法是一样的。