🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] ## 概述 企业使用自定义的资源时,比如发送本地图片、视频等。为了实现同一资源文件,一次上传可以多次使用,我们提供了素材管理接口:以media\_id来标识资源文件,实现文件的上传与下载。 ## 上传临时素材 把媒体文件上传到微信客服的服务器。 > 素材上传得到media\_id,该media\_id仅三天内有效 **请求方式:**POST(**HTTPS**) **请求地址:**https://qyapi.weixin.qq.com/cgi-bin/media/upload?access\_token=ACCESS\_TOKEN&type=TYPE 使用multipart/form-data POST上传文件, 文件标识名为”media” **参数说明:** | 参数 | 必须 | 说明 | | --- | --- | --- | | access\_token | 是 | 调用接口凭证 | | type | 是 | 媒体文件类型,分别有图片(image)、语音(voice)、视频(video),普通文件(file) | POST的请求包中,form-data中媒体文件标识,应包含有**filename**、filelength、content-type等信息 > filename标识文件展示的名称。比如,使用该media\_id发消息时,展示的文件名由该字段控制 **请求示例:** ~~~ POST https://qyapi.weixin.qq.com/cgi-bin/media/upload?access_token=accesstoken001&type=file HTTP/1.1Content-Type: multipart/form-data; boundary=-------------------------acebdf13572468Content-Length: 220---------------------------acebdf13572468Content-Disposition: form-data; name="media";filename="wework.txt"; filelength=6Content-Type: application/octet-streammytext---------------------------acebdf13572468-- ~~~ **返回数据:** ~~~ { "errcode": 0, "errmsg": "", "type": "image", "media_id": "1G6nrLmr5EC3MMb_-zK1dDdzmd0p7cNliYu9V5w7o8K0", "created_at": "1380000000"} ~~~ **参数说明:** | 参数 | 说明 | | --- | --- | | type | 媒体文件类型,分别有图片(image)、语音(voice)、视频(video),普通文件(file) | | media\_id | 媒体文件上传后获取的唯一标识,3天内有效 | | created\_at | 媒体文件上传时间戳 | **上传的媒体文件限制** 所有文件size必须大于5个字节 * 图片(image):2MB,支持JPG,PNG格式 * 语音(voice) :2MB,播放长度不超过60s,**仅支持**AMR格式 * 视频(video) :10MB,支持MP4格式 * 普通文件(file):20MB ## 获取临时素材 获取微信客服的临时素材。即下载临时的多媒体文件。 **请求方式:**GET(**HTTPS**) **请求地址:**https://qyapi.weixin.qq.com/cgi-bin/media/get?access\_token=ACCESS\_TOKEN&media\_id=MEDIA\_ID **参数说明 :** | 参数 | 必须 | 说明 | | --- | --- | --- | | access\_token | 是 | 调用接口凭证 | | media\_id | 是 | 媒体文件id, 见[上传临时素材](https://work.weixin.qq.com/servicer/docs_wx?id=26580#h2-u4E0Au4F20u4E34u65F6u7D20u6750) | **返回说明 :** 正确时返回(和普通的http下载相同,请根据http头做相应的处理): ~~~ HTTP/1.1 200 OK Connection: close Content-Type: image/jpeg Content-disposition: attachment; filename="MEDIA_ID.jpg" Date: Sun, 06 Jan 2013 10:20:18 GMT Cache-Control: no-cache, must-revalidate Content-Length: 339721 Xxxx ~~~ 错误时返回(这里省略了HTTP首部): ~~~ { "errcode": 40007, "errmsg": "invalid media_id"} ~~~ **附注:支持断点下载(分块下载)** 本接口支持通过在http header里指定`Range`来分块下载。 在文件很大,可能下载超时的情况下,推荐使用分块下载。 以curl命令进行测试为例,假如我有一个2048字节的文件, 下面是获取文件前1024字节: > curl ‘https://qyapi.weixin.qq.com/cgi-bin/media/get?access\_token=ACCESS\_TOKEN&media\_id=MEDIA\_ID’ -i -H “Range: bytes=0-1023” 生成如下http请求: > GET /cgi-bin/media/get?access\_token=ACCESS\_TOKEN&media\_id=MEDIA\_ID HTTP/1.1 > Host: qyapi.weixin.qq.com > Range: bytes 0-1023 服务器端会返回状态码为 206 Partial Content 的响应: > HTTP/1.1 206 Partial Content > Accept-Ranges: bytes > Content-Range: bytes 0-1023/2048 > Content-Length: 1024 > … > (1024 Bites binary content) 可以看到响应中有如下特点: * 状态码是`206 Partial Content`,而非`200 ok` * 返回的header中,`Accept-Ranges`首部表示可用于定义范围的单位 * 返回的header中,`Content-Range`首部表示这一部分内容在整个资源中所处的位置 更多协议详情参考[RFC: Range Requests](https://tools.ietf.org/html/rfc7233#section-4.1)