使用上传插件 Web Uploader 上传图片到七牛云(C#)

之前有写过一篇文章,基于asp.net mvc 封装 Web Uploader 上传插件:

http://www.cnblogs.com/vanteking/p/5623682.html

已经实现的功能有:

封装 my97datepicker 日历插件 :

 @Html.Calendar("time")

封装 ckeditor编辑器:

 @Html.RichTextEditor("CKEDITOR1", new RichTextEditor { Height = 300, ToolBar = RichTextEditorToolBar.Full, Plugins = RichTextEditorPlugins.CKEDITOR, Width = 900 })

另外还有百度编辑器的封装,只需要改版参数就可以使用了。
ckeditor 里还配合使用了 ckfinder

今天重点讲下封装的Web Uploader插件,图片可以上传到七牛云和本地。

先上图:

 

 

图片上传到七牛云:

                //Qiniu云
                var file = Request.Files["file"];
                if (file != null && file.InputStream != null && file.ContentLength > 0)
                {
                    //七牛空间
                    var qiniuStore = SystemConst.GetRandStore();
                    //学校
                    var school = ViewBag._school_ as SchoolLibrary;
                    //时间戳
                    var stime = TimeHelper.ConvertDateTimeInt(DateTime.Now);
                    //原始文件名
                    var mine = file.FileName.Substring(file.FileName.LastIndexOf("."));
                    //目标地址
                    var filePath = "{0}/{1}/{2}{3}".FormatWith(school.Domain, user.ID.GetHashCode(), stime, mine);
                    //模型
                    var buket = new Bucket
                    {
                        FileType = (UploadFileType)fileType,
                        stream = file.InputStream,
                        saveFilePath = filePath,
                        saveFileName = file.FileName,
                        bucket = qiniuStore.Space,
                        PicDomain = qiniuStore.Domain
                    };
                    uploadResult = BucketHelper.UploadFile(buket);

删除七牛云图片:

 //人员信息
            var user = ViewBag.stu as OStudent;
            //域名空间
            var qiniuStore = SystemConst.StoreList.FirstOrDefault(m => file.IsNullOrEmpty() == false && file.StartsWith(m.Domain));

            if (string.IsNullOrEmpty(file) == true) { _msg = "文件未找到!"; }
            else if (qiniuStore != null)
            {
                if (file.ToLower().Contains(user.ID.GetHashCode().ToString()) == false) { _msg = "没有权限!"; }
                else
                {
                    //地址
                    var saveFilePath = file.Replace(qiniuStore.Domain, "").Trim();
                    //模型
                    var buket = new Bucket
                    {
                        saveFilePath = saveFilePath,
                        bucket = qiniuStore.Space,
                    };
                    var result = BucketHelper.Delete(buket);
                    if (result.State == (int)UploadState.Success)
                    {
                        _err = false;
                    }
                    else
                    {
                        _msg = result.ErrorMessage;
                    }
                }
            }

还做了一个七牛云的类的封装:

上传:

     /// <summary>
        /// 上传文件
        /// </summary>
        /// <param name="model"></param>
        /// <param>FileType 文件类型</para>
        /// <param>bucket 目标空间 默认:studystone</para>
        /// <param>PicDomain 目标空间对应的默认域名 </para>
        /// <param>strSchool 学校二级</para>
        /// <param>saveFileName 目标文件名</para>
        /// <param>localFile 本地文件(优先)</para>
        /// <param>stream 文件流(本地文件存在则,忽略)</para>
        /// <returns></returns>
        public static UploadResult UploadFile(Bucket model)
        {
            //结果
            var result = new UploadResult { };
            //数据
            var data = new HttpResult();
            //类型
            switch (model.FileType)
            {
                case UploadFileType.Image:
                    model.mimeLimit = "image/*";
                    model.fsizeLimit = 2097152;//2M
                    break;
                case UploadFileType.Video:
                    model.mimeLimit = "video/mp4";
                    model.fsizeLimit = 41943040;//40M
                    break;
                case UploadFileType.File:
                default:
                    model.mimeLimit = "application/msword;application/vnd.openxmlformats-officedocument.wordprocessingml.document;application/vnd.ms-excel;application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;application/pdf;application/vnd.ms-powerpoint;application/x-rar-compressed;application/x-zip-compressed;text/css;text/html;application/x-javascript;application/json;text/plain";
                    model.fsizeLimit = 41943040;//40M
                    break;
            }
            // 上传策略
            PutPolicy putPolicy = new PutPolicy();
            // 设置要上传的目标空间
            putPolicy.Scope = model.bucket;
            // 上传策略的过期时间(单位:秒)
            putPolicy.SetExpires(3600);
            // 文件上传完毕后,在多少天后自动被删除
            //putPolicy.DeleteAfterDays = int.MaxValue;
            // Use AK & SK here
            Mac mac = new Mac(AK, SK);
            // 生成上传凭证
            string uploadToken = Auth.CreateUploadToken(mac, putPolicy.ToJsonString());
            // 开始上传文件
            FormUploader um = new FormUploader();
            try
            {
                //目标地址
                if (string.IsNullOrEmpty(model.localFile) == false && File.Exists(model.localFile) == true)
                {
                    data = um.UploadFile(model.localFile, model.saveFilePath, uploadToken);
                }
                else if (model.stream != null)
                {
                    data = um.UploadStream(model.stream, model.saveFilePath, uploadToken);
                }
                else
                {
                    result.State = UploadState.Unknown;
                    result.ErrorMessage = "上传文件为空";
                    return result;
                }
                //结果判断
                switch (data.Code)
                {
                    //上传成功
                    case 200:
                        result.file = new QiniuFile
                        {
                            Date = DateTime.Now.ToString("yyyy年MM月dd日"),
                            Moment = DateTime.Now.ToString("HH:mm tt").Replace("上午", "AM").Replace("下午", "PM"),
                            FileName = model.saveFilePath.Substring(model.saveFilePath.LastIndexOf("/") + 1),
                            Fsize = 0,
                            Src = model.PicDomain + model.saveFilePath
                        };
                        result.State = UploadState.Success;
                        result.Url = model.PicDomain + model.saveFilePath;
                        result.OriginFileName = model.saveFilePath.Substring(model.saveFilePath.LastIndexOf("/") + 1);
                        break;
                    case 403:
                        result.State = UploadState.TypeNotAllow;
                        result.ErrorMessage = "不允许的文件格式上传";
                        break;
                    case 413:
                        result.State = UploadState.TypeNotAllow;
                        result.ErrorMessage = "文件大小超过限制";
                        break;
                    case 612:
                        result.State = UploadState.TypeNotAllow;
                        result.ErrorMessage = "文件已存在";
                        break;
                    default:
                        result.State = UploadState.Unknown;
                        result.ErrorMessage = "文件上传失败";
                        break;
                }
            }
            catch (Exception e)
            {
                result.State = UploadState.Unknown;
                result.ErrorMessage = e.Message;
            }
            return result;
        }

获取七牛云图片列表

   /// <summary>
        /// 获取空间下面所有的图片
        /// </summary>
        /// <param name="model"></param>
        /// <para>bucket 目标空间默认:stonestudy</para>
        /// <para>prefix 按文件名前缀保留搜索结果 如:ss/</para>
        /// <para>limit  每次最大请求的数量最大1000</para>
        /// <para>delimiter</para>
        /// <returns></returns>
        public static List<QiniuFile> FileList(Bucket model)
        {
            Mac mac = new Mac(AK, SK);
            BucketManager bm = new BucketManager(mac);

            // 返回结果存储在items中
            List<QiniuFile> items = new List<QiniuFile>();
            // 由于limit限制,可能需要执行多次操作
            // 返回值中Marker字段若非空,则表示文件数超过了limit
            do
            {
                var result = bm.ListFiles(model.bucket, model.prefix, model.marker, model.limit, model.delimiter);
                //标记
                model.marker = result.Result.Marker;
                if (result.Result.Items != null)
                {
                    result.Result.Items.ForEach(m =>
                    {
                        var date = TimeHelper.GetFullTime(m.PutTime.ToString());
                        items.Add(new QiniuFile
                        {
                            FileName = m.Key.Substring(m.Key.LastIndexOf("/") + 1),
                            Fsize = m.Fsize,
                            MimeType = m.MimeType,
                            Src = model.PicDomain + m.Key,
                            Date = date.ToString("yyyy年MM月dd日"),
                            Moment = date.ToString("HH:mm tt").Replace("上午", "AM").Replace("下午", "PM")
                        });
                    });
                }
            } while (!string.IsNullOrEmpty(model.marker));
            return items;
        }

删除图片

 /// <summary>
        /// 删除文件
        /// </summary>
        /// <param name="model"></param>
        /// <para>bucket 目标空间 默认:studystone</para>
        /// <para>saveFilePath 目标文件,非全路径 例如: temp/logo.png</para>
        /// <returns></returns>
        public static UploadResult Delete(Bucket model)
        {
            var result = new UploadResult();
            try
            {
                Mac mac = new Mac(AK, SK);
                BucketManager target = new BucketManager(mac);
                var data = target.Delete(model.bucket, model.saveFilePath);
                switch (data.Code)
                {
                    //上传成功
                    case 200:
                        result.State = UploadState.Success;
                        break;
                    case 612:
                        result.State = UploadState.TypeNotAllow;
                        result.ErrorMessage = "    待删除资源不存在";
                        break;
                    default:
                        result.State = UploadState.Unknown;
                        result.ErrorMessage = "文件删除失败";
                        break;
                }
            }
            catch (Exception)
            {
                result.State = UploadState.Unknown;
                result.ErrorMessage = "文件删除失败";
            }
            return result;
        }
原文地址:https://www.cnblogs.com/vanteking/p/6678065.html