/// <summary> /// 新增永久素材(多媒体文件) /// </summary> /// <param name="userName">公众号</param> /// <param name="type">媒体文件类型,分别有图片(image)、语音(voice)、视频(video)和缩略图(thumb)</param> /// <param name="fileName">文件名(不包含路径)</param> /// <param name="data">数据</param> /// <param name="errorMessage">返回新增是否成功</param> /// <param name="title">视频素材的标题(对于其他媒体类型,忽略该参数)</param> /// <param name="introduction">视频素材的描述(对于其他媒体类型,忽略该参数)</param> /// <returns>返回多媒体的id;如果上传失败,返回null。</returns> public static string Add(string userName, MultiMediaTypeEnum type, string fileName, byte[] data, out ErrorMessage errorMessage, string title = null, string introduction = null) { if (type == MultiMediaTypeEnum.news) { errorMessage = new ErrorMessage(ErrorMessage.ExceptionCode, "不能使用该方法新增永久图文消息,请使用新增图文消息的重载方法。"); return(null); } if (type == MultiMediaTypeEnum.video && (string.IsNullOrEmpty(title) || string.IsNullOrEmpty(introduction))) { errorMessage = new ErrorMessage(ErrorMessage.ExceptionCode, "新增永久视频素材时,必须提供标题和描述。"); return(null); } AccessToken token = AccessToken.Get(userName); if (token == null) { errorMessage = new ErrorMessage(ErrorMessage.ExceptionCode, "获取许可令牌失败。"); return(null); } string url = string.Format(urlForAddingMeterial, token.access_token, type.ToString("g")); NameValueCollection formData = null; if (type == MultiMediaTypeEnum.video) { formData.Add("description", JsonConvert.SerializeObject(new { title = title, introduction = introduction })); } string responseContent = HttpHelper.Upload(url, fileName, data, formData); return(GetMediaId(responseContent, out errorMessage)); }
/// <summary> /// 从JSON字符串解析多媒体上传结果 /// </summary> /// <param name="json">JSON字符串</param> /// <returns>返回多媒体上传结果</returns> public static MultiMediaUploadResult Parse(string json) { var result = JsonConvert.DeserializeAnonymousType(json, new { type = "TYPE", media_id = "MEDIA_ID", created_at = 123456789 }); MultiMediaTypeEnum type = (MultiMediaTypeEnum)Enum.Parse(typeof(MultiMediaTypeEnum), result.type, true); string mediaId = result.media_id; DateTime createdAt = Utility.ToDateTime(result.created_at); return(new MultiMediaUploadResult(type, mediaId, createdAt)); }
/// <summary> /// 新增素材 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void btnAdd_Click(object sender, EventArgs e) { string userName = lbPublicAccount.SelectedValue; MultiMediaTypeEnum type = (MultiMediaTypeEnum)Enum.Parse(typeof(MultiMediaTypeEnum), lbMultiMediaType.SelectedValue); ErrorMessage errorMessage; string mediaId = Meterial.Add(userName, type, fileUpload.FileName, fileUpload.FileBytes, out errorMessage); if (errorMessage.IsSuccess) { ltrMessage.Text = string.Format("新增永久{0:g}素材成功。素材媒体id:{1}", type, mediaId); } else { ltrMessage.Text = string.Format("新增永久{0:g}素材失败。{1}", type, errorMessage); } }
/// <summary> /// 批量获取素材列表 /// </summary> /// <param name="userName">公众号</param> /// <param name="type">素材类型</param> /// <param name="offset">从全部素材的该偏移位置开始返回,0表示从第一个素材返回</param> /// <param name="count">返回素材的数量,取值在1到20之间</param> /// <param name="errorMessage">返回是否获取成功</param> /// <returns>返回素材列表;如果获取失败,返回null。</returns> public static BatchMeterial BatchGet(string userName, MultiMediaTypeEnum type, int offset, int count, out ErrorMessage errorMessage) { if (offset < 0) { errorMessage = new ErrorMessage(ErrorMessage.ExceptionCode, "偏移位置不能小于0。"); return(null); } if (count < 1 || count > 20) { errorMessage = new ErrorMessage(ErrorMessage.ExceptionCode, "素材数量必须介于1至20之间。"); return(null); } string json = JsonConvert.SerializeObject(new { type = type.ToString("g"), offset = offset, count = count }); return(HttpHelper.RequestParsableResult <BatchMeterial>(urlForBatchGettingMeterial, userName, out errorMessage, null, httpMethodForBatchGettingMeterial, json)); }
/// <summary> /// 上传多媒体文件 /// </summary> /// <param name="userName">公众号</param> /// <param name="type">多媒体类型</param> /// <param name="pathName">包含路径的文件名</param> /// <param name="errorMessage">返回上传是否成功</param> /// <returns>返回多媒体上传结果;如果上传失败,返回null。</returns> public static MultiMediaUploadResult Upload(string userName, MultiMediaTypeEnum type, string pathName, out ErrorMessage errorMessage) { if (type == MultiMediaTypeEnum.news) { errorMessage = new ErrorMessage(ErrorMessage.ExceptionCode, "不能使用该方法上传图文消息,请使用上传图文消息的重载方法。"); return(null); } AccessToken token = AccessToken.Get(userName); if (token == null) { errorMessage = new ErrorMessage(ErrorMessage.ExceptionCode, "获取许可令牌失败。"); return(null); } string url = string.Format(urlForUploadingMedia, token.access_token, type.ToString("g")); string responseContent = HttpHelper.Upload(url, pathName); return(ParseResult(responseContent, out errorMessage)); }
/// <summary> /// 上传多媒体文件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void btnUpload_Click(object sender, EventArgs e) { string userName = lbPublicAccount.SelectedValue; MultiMediaTypeEnum type = (MultiMediaTypeEnum)Enum.Parse(typeof(MultiMediaTypeEnum), lbMultiMediaType.SelectedValue); string filename = fileUpload.FileName; byte[] bytes = fileUpload.FileBytes; ErrorMessage errorMessage; MultiMediaUploadResult result = MultiMediaHelper.Upload(userName, type, filename, bytes, out errorMessage); if (errorMessage.IsSuccess && result != null) { hlShowMultiMedia.NavigateUrl = MultiMediaHelper.GetDownloadUrl(AccessToken.Get(userName).access_token, result.MediaId); ltrMessage.Text = "上传多媒体文件成功。"; } else { hlShowMultiMedia.NavigateUrl = string.Format("javascript:alert('上传多媒体文件失败。\r\n{0}');", errorMessage); ltrMessage.Text = string.Format("上传多媒体文件失败。\r\n{0}", errorMessage); } }
/// <summary> /// 构造函数 /// </summary> /// <param name="type">多媒体类型</param> /// <param name="mediaId">媒体ID</param> /// <param name="createAt">创建时间</param> public MultiMediaUploadResult(MultiMediaTypeEnum type, string mediaId, DateTime createAt) { Type = type; MediaId = mediaId; CreatedAt = createAt; }
/// <summary> /// 新增临时素材(多媒体文件) /// </summary> /// <param name="userName">公众号</param> /// <param name="type">媒体文件类型,分别有图片(image)、语音(voice)、视频(video)和缩略图(thumb)</param> /// <param name="fileName">文件名(不包含路径)</param> /// <param name="data">数据</param> /// <param name="errorMessage">返回上传是否成功</param> /// <returns>返回上传多媒体文件的结果;如果上传失败,返回null。</returns> public static MultiMediaUploadResult AddTemporary(string userName, MultiMediaTypeEnum type, string fileName, byte[] data, out ErrorMessage errorMessage) { return(MultiMediaHelper.Upload(userName, type, fileName, data, out errorMessage)); }
/// <summary> /// 新增临时素材(多媒体文件) /// </summary> /// <param name="userName">公众号</param> /// <param name="type">媒体文件类型,分别有图片(image)、语音(voice)、视频(video)和缩略图(thumb)</param> /// <param name="pathName">包含路径的文件名</param> /// <param name="errorMessage">返回上传是否成功</param> /// <returns>返回多媒体上传结果;如果上传失败,返回null。</returns> public static MultiMediaUploadResult AddTemporary(string userName, MultiMediaTypeEnum type, string pathName, out ErrorMessage errorMessage, out string responseContent) { return(MultiMediaHelper.Upload(userName, type, pathName, out errorMessage, out responseContent)); }