コード例 #1
0
ファイル: MediaManager.cs プロジェクト: poleices/WeiXinOpen
        /// <summary>
        /// 检测上传的媒体是否满足基本要求
        /// </summary>
        /// <param name="media"></param>
        /// <returns></returns>
        private BasicResult MediaChecker(LocalMedia media)
        {
            var sizes = new Dictionary <string, long>
            {
                { Media.Image, 128 * 1024 },
                { Media.Voice, 256 * 1024 },
                { Media.Video, 1 * 1024 * 1024 },
                { Media.Thumb, 64 * 1024 },
            };

            if (media == null)
            {
                return(BasicResult.GetFailed("缺少媒体参数"));
            }
            if (!File.Exists(media.MediaPath))
            {
                return(BasicResult.GetFailed("指定的媒体文件不存在"));
            }
            if (string.IsNullOrEmpty(media.MediaType))
            {
                return(BasicResult.GetFailed("未指定媒体类型"));
            }
            if (new FileInfo(media.MediaPath).Length > sizes[media.MediaType])
            {
                return(BasicResult.GetFailed(string.Format("指定的媒体文件超过限制大小{0}K", sizes[media.MediaPath] / 1024)));
            }

            return(BasicResult.GetSuccess());
        }
コード例 #2
0
        /// <summary>
        ///     下载媒体文件。
        ///     如果下载成功,返回值的ErrMsg属性携带保存的文件全路径
        /// </summary>
        /// <param name="mediaId"></param>
        /// <param name="filePath">
        ///     保存下载的文件的本地文件名或目录(以\结尾)。
        ///     如果为目录,则文件名为微信响应的文件名。
        ///     如果文件已经存在,则会覆盖原文件。
        /// </param>
        /// <returns>如果成功,ErrMsg属性携带保存的文件全路径</returns>
        public BasicResult Download(string mediaId, string filePath)
        {
            var param = new FormData
            {
                { "access_token", AccessToken },
                { "media_id", mediaId }
            };

            var url      = string.Format("{0}?{1}", DownLoadUrl, param.Format());
            var request  = HttpHelper.CreateRequest(url);
            var response = request.GetResponse();

            using (var stream = response.GetResponseStream())
            {
                var disposition = response.Headers["Content-disposition"];
                if (string.IsNullOrEmpty(disposition))
                {
                    var s = new StreamReader(stream, Encoding.UTF8).ReadToEnd();
                    return(JsonConvert.DeserializeObject <BasicResult>(s));
                }

                filePath = filePath.EndsWith(@"\")
                    ? string.Format("{0}{1}", filePath,
                                    Regex.Match(disposition, "(?<=filename\\s*=\\s*\\\"?)[^\\\"]+", RegexOptions.IgnoreCase))
                    : filePath;
                var fs = new FileStream(filePath, FileMode.OpenOrCreate);
                try
                {
                    var buffer = new byte[128 * 1024]; //128K
                    int i;
                    while ((i = stream.Read(buffer, 0, buffer.Length)) > 0)
                    {
                        fs.Write(buffer, 0, i);
                    }

                    return(BasicResult.GetSuccess(filePath));
                }
                finally
                {
                    fs.Close();
                }
            }
        }