首页/新闻资讯/正文详情

EasyWeChat 官方账号临时素材(media)上传与下载实战指南

发布时间:2026/9/24 14:25:17 来源:云帆数科 栏目:资讯中心
EasyWeChat 官方账号临时素材(media)上传与下载实战指南
后端即时通讯【免费下载链接】easywechat 一个 PHP 微信 SDK项目地址https://gitcode.com/gh_mirrors/ea/easywechat点击查看免费下载临时素材是微信公众号开发中最常用的基础能力之一无论是群发消息、客服消息还是自定义菜单、自动回复中的图片、语音、视频都需要先将文件上传到微信服务器换取media_id。本篇指南以 EasyWeChat 4.x 文档《临时素材》为核心骨架结合当前仓库w7corp/easywechat的源码实现src/OfficialAccount/Application.php、src/Kernel/HttpClient/AccessTokenAwareClient.php逐层拆解从素材格式与大小限制、四类基础上传方法到群发视频的上传与素材创建、二进制流的保存下载再到请求底层如何自动携带access_token、如何判断失败并触发重试帮助读者一次性掌握临时素材的完整链路。临时素材是什么类型、格式与大小限制临时素材Temporary Media指通过微信接口上传后由微信服务器临时保存的多媒体文件。EasyWeChat 中通过$app-media入口调用上传成功的素材会返回media_id供后续创建消息、群发等场景使用。上传的临时多媒体文件有严格的格式和大小限制EasyWeChat 4.x 文档给出的官方约束如下素材类型大小限制格式要求图片image2MJPG语音voice2M播放长度不超过 60sAMR/MP3视频video10MBMP4缩略图thumb64KBJPG上述限制来自 docs/src/4.x/basic-services/media.md 原文。实际开发中请以微信开放平台最新公告为准并尽量在上传前于应用层做好文件类型与大小的前置校验避免无谓的接口调用。与永久素材$app-material见 docs/src/4.x/official-account/material.md不同临时素材适合一次性使用的场景例如客服消息中的图片、群发前的视频中转等。上传前请注意微信图片上传服务带有敏感内容检测系统图片若含色情、商品推广、虚假信息等内容上传可能失败。前置准备初始化 Application 与 media 入口$app-media并不需要单独实例化它由 src/OfficialAccount/Application.php 统一装配。从源码可见官方账号应用的核心配置项包括app_id、secret应用凭据用于构建Account与AccessToken见 getAccount() 与 getAccessToken()token、aes_key消息加解密所需require_encryption控制是否强制加密见 getServer()http.retry/http.max_retries/http.throwHTTP 重试与异常抛出策略。所有对微信 API 的请求都经由 createClient() 创建AccessTokenAwareClient发起其base_uri固定为https://api.weixin.qq.com/见 getHttpClientDefaultOptions()因此文档中的uploadImage、get等方法内部会自动拼接出完整的微信接口 URL。使用前仅需use EasyWeChat\OfficialAccount\Application; $config [ app_id your-app-id, secret your-secret, token your-token, aes_key your-aes-key, // http [ // retry true, // 是否开启自动重试 // max_retries 2, // 最大重试次数默认 2 // throw true, // 请求失败是否抛出异常默认 true // ], ]; $app new Application($config);上传图片、语音、视频与缩略图上传图片$app-media-uploadImage($path);$path为本地文件路径。由于 PHP 的相对路径受当前工作目录影响强烈建议传入绝对路径这一经验同样适用于永久素材参见 docs/src/3.x/material.md 中的提示例如使用__DIR__ . /stubs/image.jpg的方式构造路径避免因脚本执行目录不同导致文件找不到。上传语音$app-media-uploadVoice($path);语音素材受 2M 大小与 60 秒播放时长限制仅支持AMR与MP3格式请在调用前自行校验。上传视频视频上传需要同时提供标题与描述$app-media-uploadVideo($path, $title, $description);注意视频接口的限制是 10MB 且为MP4格式超过该大小会上传失败。上传缩略图缩略图通常用于视频封面或音乐封面$app-media-uploadThumb($path);缩略图限制为 64KB仅支持JPG格式。上传群发视频群发场景下的视频处理与普通视频上传不同需要先通过uploadVideoForBroadcasting获取专门的media_id$app-media-uploadVideoForBroadcasting($path, $title, $description); //{ // media_id: rF4UdIMfYK3efUfyoddYRMU50zMiRmmt_l0kszupYh_SzrcW5Gaheq05p_lHuOTQ, // title: TITLE, // description: Description //}返回结果中的media_id即用于创建群发消息的素材凭证。创建群发消息素材与上传群发视频的区别这一小节最容易被混淆请务必区分两个概念上传群发视频uploadVideoForBroadcasting把本地视频文件上传到微信服务器拿到media_id创建群发消息素材createVideoForBroadcasting用上一步拿到的media_id加上标题、描述创建一条视频消息素材用于真正发送给用户。$app-media-createVideoForBroadcasting($mediaId, $title, $description); //{ // type:video, // media_id:IhdaAQXuvJtGzwwc0abfXnzeezfO0NgPK6AQYShD8RQYMTtfzbLdBIQkQziv2XJc, // created_at:1398848981 //}完整的群发链路可以参考 docs/src/4.x/official-account/broadcasting.md 中的视频消息示例// 1. 先上传视频素材用于群发 $video /path/to/video.mp4; $videoMedia $app-media-uploadVideoForBroadcasting($video, 视频标题, 视频描述); // 2. 使用上面得到的 media_id 群发视频消息 $app-broadcasting-sendVideo($videoMedia[media_id]);获取临时素材内容并保存为本地文件对于图片、语音等二进制流内容get()返回的是EasyWeChat\Kernel\Http\StreamResponse实例可直接保存到本地$stream $app-media-get($mediaId); if ($stream instanceof \EasyWeChat\Kernel\Http\StreamResponse) { // 以内容 md5 为文件名存到本地 $stream-save(保存目录); // 自定义文件名不需要带后缀 $stream-saveAs(保存目录, 文件名); }两点使用要点save($directory)会自动以响应内容的 md5 值作为文件名适合批量落盘、按内容去重的场景saveAs($directory, $filename)允许自定义文件名且无需携带文件后缀系统会自动补全。同样的StreamResponse保存模式也出现在永久素材与小程序码等场景中见 docs/src/4.x/official-account/material.md 与 docs/src/4.x/mini-program/app_code.md掌握这一模式即可举一反三。获取 JSSDK 上传的高清语音微信 JS-SDK 通过wx.uploadVoice上传的高清语音属于另一套素材接口需使用getJssdkMedia获取$stream $app-media-getJssdkMedia($mediaId); $stream-saveAs(保存目录, custom-name.speex);这类语音为speex格式保存时建议显式指定.speex后缀注意此方法不会自动补全后缀。源码视角media 请求是如何走到微信 API 的虽然当前仓库未单独提供Media类文件但结合 src/OfficialAccount/Application.php 与 src/Kernel/HttpClient/AccessTokenAwareClient.php 可以还原完整调用链$app-media经由应用容器的魔术方法分发到createClient()创建的AccessTokenAwareClient实例所有未明确定义的方法如uploadImage通过 __call() 委托给底层 Symfony HttpClient在 request() 中客户端会自动将当前 access token 以 query 参数形式附加到请求$options[query] array_merge(..., $this-accessToken-toQuery())因此业务代码无需手动携带 token请求体经RequestUtil::formatBody()规范化JSON / multipart 等后发出返回结果被包装为 src/Kernel/HttpClient/Response.php并通过failureJudgeerrcode非 0 即判定失败见 createClient()与http.throw配置决定是否抛出异常若配置了http.retry当响应内容同时出现42001与access_token expired时会触发 AccessTokenExpiredRetryStrategy 的自动重试换取新 token 后重新发起请求——这为临时素材上传等高频操作提供了额外的健壮性。常见问题与注意事项素材类型与大小不符图片仅JPG、语音仅AMR/MP3≤60s、视频仅MP4≤10MB、缩略图仅JPG≤64KB上传前先做本地校验敏感内容拦截图片含色情、商品推广、虚假信息等内容时上传可能失败需引导运营规避路径问题$path尽量使用绝对路径防止脚本工作目录变化导致文件定位失败群发视频两步骤不要混用先uploadVideoForBroadcasting拿media_id再createVideoForBroadcasting建消息素材最后$app-broadcasting-sendVideo($mediaId)发送完整示例见 docs/src/4.x/official-account/broadcasting.md二进制响应get()/getJssdkMedia()返回StreamResponse务必用instanceof判断后再调用save()/saveAs()保存saveAs自定义文件名时无需带后缀。至此从素材限制、上传方法、群发衔接到下载保存与底层请求机制EasyWeChat 的临时素材能力已全部覆盖可直接用于生产开发。赞分享后端即时通讯【免费下载链接】easywechat 一个 PHP 微信 SDK项目地址https://gitcode.com/gh_mirrors/ea/easywechat点击查看免费下载相关推荐EasyWeChat 5.x 临时素材Media完整指南上传、群发视频与下载全流程EasyWeChat 5.x 临时素材Media完整指南上传、群发视频与下载全流程 本篇指南基于 EasyWeChat 5.x 官方文档「临时素材」章节展后端即时通讯企业微信临时素材上传与下载实战EasyWeChat 4.x 企业微信 media 接口全解企业微信临时素材上传与下载实战EasyWeChat 4.x 企业微信 media 接口全解 本篇技术指南聚焦 EasyWeChat 4.x 中企业微信WeC后端即时通讯EasyWeChat 3.x 素材管理完全指南永久素材与临时素材的上传、获取与管理实战EasyWeChat 3.x 素材管理完全指南永久素材与临时素材的上传、获取与管理实战 在微信公众号开发中图片、语音、视频等多媒体文件必须先上传到微信服务器后端即时通讯上一篇Data-Science-For-Beginners Docker容器VSCode远程开发环境配置下一篇EmulatorJS浏览器游戏模拟器终极指南5分钟搭建个人复古游戏平台创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

DeepSeek低资源微调实战:政务政策问答系统落地指南
DeepSeek低资源微调实战:政务政策问答系统落地指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 14:25:10

RenderDoc 内置的 ToolWindowManager:基于 Qt 的可定制停靠窗口管理组件深度解析
RenderDoc 内置的 ToolWindowManager:基于 Qt 的可定制停靠窗口管理组件深度解析

开发工具调试器图形学GPU 【免费下载链接】renderdoc RenderDoc is a stand-alone graphics debugging tool. 项目地址: https://gitcode.com/gh_mirrors/re/renderdoc 点击查看 免费下载 ToolWindowManager 是 RenderDoc 的 qrenderdoc(Qt 图形界面&am… · 2026/9/24 14:25:10

西门子PLC与变频器Modbus通讯故障排查实战
西门子PLC与变频器Modbus通讯故障排查实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 14:25:04

DRF 3.x APP Model Serializer 应用模型序列化使用示例和配置方法
DRF 3.x APP Model Serializer 应用模型序列化使用示例和配置方法

在现代Web API开发中,数据序列化是后端与前端、以及不同服务之间传递和处理数据的关键环节。Django REST Framework(DRF)提供了一系列强大而灵活的序列化器,帮助开发者将复杂的模型数据转换为适合API的输出格式。 本文详细介绍了DRF中序列化器的常用字段、特殊字段、高级字… · 2026/9/24 15:59:46

如何快速提高物理实验中的误差控制能力
如何快速提高物理实验中的误差控制能力

快速提升物理实验误差控制能力,核心是分层针对性训练标准化流程固化,不用高端实验室,1-2个月就能把普通物理实验的结果相对误差稳定控制在1%以内,完全适配你家孩子轻量低负担的学习节奏: 📏 第一阶段&#… · 2026/9/24 15:59:46

DRF 3.x Authentication 身份验证使用示例和配置方法
DRF 3.x Authentication 身份验证使用示例和配置方法

在Django REST Framework(DRF)中,身份验证是保证API安全性的基础。DRF 提供了多种内置的身份验证方法,开发者可以根据具体需求进行配置。这些身份验证方法包括基于令牌、会话、OAuth2等多种形式,能够灵活应对不同应用场景。 本文旨在为初学者及自学编程者详细介绍DRF中身… · 2026/9/24 15:59:46

DRF 3.x Permissions 权限使用示例和配置方法
DRF 3.x Permissions 权限使用示例和配置方法

在Django REST Framework(DRF)中,权限(Permissions)是保证API安全性的一个重要组成部分。通过配置权限,能够限制特定用户对特定资源的访问,确保API只能被有权访问的用户使用。权限系统是DRF中一个灵活且强大的功能模块,它为用户提供了多种方法来控制API的访问和操作权限… · 2026/9/24 15:59:46

DRF 3.x URLs and Router 链接和路由使用示例和配置方法
DRF 3.x URLs and Router 链接和路由使用示例和配置方法

在开发现代Web应用程序时,API(应用程序接口)设计是非常重要的一部分。Django REST Framework(简称DRF)作为一个非常流行的Django扩展工具,极大地方便了开发者进行API接口的设计与实现。而在DRF中,URL和Router的配置是其核心部分之一,通过URL与路由的合理配置,能够简化… · 2026/9/24 15:59:40

DRF 3.x Serializers 序列化使用示例和配置方法
DRF 3.x Serializers 序列化使用示例和配置方法

Django REST framework(DRF)是一个非常强大的Web API框架,而在其中,Serializers(序列化器)是连接数据库模型与前端数据之间的桥梁。它不仅负责将复杂的数据类型(如QuerySet和模型实例)转换为Python数据类型,还能将Python数据转换为JSON等格式,从而使得前后端的交互更… · 2026/9/24 15:59:40

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码