zoukankan      html  css  js  c++  java
  • 使用上传插件 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;
            }
  • 相关阅读:
    python之字典方法
    python之字符串方法
    python strip()方法使用
    Airtest自动化测试工具介绍
    selenium 环境配置
    一个自定义线程池的小Demo
    简单工厂模式
    BootStrap入门_创建第一个例子
    MongoDB的索引
    MongoDB的查询
  • 原文地址:https://www.cnblogs.com/vanteking/p/6678065.html
Copyright © 2011-2022 走看看