• Net实现阿里云开放云存储服务(OSS)


    https://shop107609893.taobao.com/?spm=a2oq0.12575281.sellercard.9.16c11debh2wBGu

    1 第一步框架搭建新建一个全新的MVC项目 (项目参考文档https://docs.aliyun.com/?spm=5176.383663.9.6.5OJI07#/pub/oss/sdk/sdk-download&dotnet)

    2.第二步引用阿里成都程序集SDK 可以在NuGet搜索下载

    3第三步代码实现

     public class UploadFileHelper
        {
            public static OSSConfiguation _OssConfiguation;
            public static OssClient ossClient;
            public static string bucketName = "";
            public static string accessid = ""; // AccessID
            public static string accesskey = ""; // AccessKey
            public static string endpoint = "";
            public static string folder = "";
            public static string localPath = "";
            public static bool Islocal = false;
            public static string imgBucket = "";
            public static string pdfBucket = "";
            static UploadFileHelper()
            {
                _OssConfiguation = (OSSConfiguation)System.Configuration.ConfigurationManager.GetSection("OSSConfig");
                bucketName = _OssConfiguation.OssConfigService.imgBucket ==""
                    ? _OssConfiguation.OssConfigService.pdfBucket
                    : _OssConfiguation.OssConfigService.imgBucket;
                accessid = _OssConfiguation.OssConfigService.accessid;
                accesskey = _OssConfiguation.OssConfigService.accesskey;
                endpoint = _OssConfiguation.OssConfigService.endpoint;
                folder = _OssConfiguation.OssConfigService.folder;
                localPath = _OssConfiguation.OssConfigService.localPath;
                Islocal =Boolean.Parse(_OssConfiguation.OssConfigService.Islocal);
    
            }
    
            /// <summary>
            /// 上传文件
            /// </summary>
            /// <param name="file"></param>
            /// <returns></returns>
            public static bool UploadFile(HttpPostedFileBase file)
            {
                if (Islocal)
                {
                    //本地存储Local
                    return UploadLocalFile(file);
                }
                else
                {
                    //开放存储OSS
                    return UploadOSSFile(file);
                }
            }
    
            /// <summary>
            /// 上传本地文件
            /// </summary>
            /// <param name="file"></param>
            /// <returns></returns>
            private static bool UploadLocalFile(HttpPostedFileBase file)
            {
                try
                {
                    string newfilename = file.FileName;
                    string serverTempFilePath = localPath + newfilename;
                    file.SaveAs(serverTempFilePath);
                    return true;
    
                }
                catch (Exception)
                {
    
                    return false;
                    throw;
                }
            }
    
    
            /// <summary>
            /// 上传阿里云文件
            /// </summary>
            /// <param name="file"></param>
            /// <returns></returns>
            private static bool UploadOSSFile(HttpPostedFileBase file)
            {
                try
                {
                    ossClient = new OssClient(endpoint, accessid, accesskey); //当然这里可以封装下
    
                    var meta = new ObjectMetadata();
    
                    meta.CacheControl = "max-age=315360000";
    
                    meta.ContentType = ContentType((file.FileName).Substring(file.FileName.LastIndexOf(".")));
    
                    var stream = file.InputStream;
    
                    string name = folder + "/" + file.FileName;
    
                    PutObjectResult result = ossClient.PutObject(bucketName, name, stream, meta);
    
                    var fileinfo = ossClient.GetObject(bucketName, name);
    
                    AccessControlList accs = ossClient.GetBucketAcl(bucketName);
    
                    string imgurl = string.Empty;
    
                    if (!accs.Grants.Any()) //判断是否有读取权限
                    {
                        imgurl = ossClient.GeneratePresignedUri(bucketName, name, DateTime.Now.AddMinutes(5)).AbsoluteUri;
                        //生成一个签名的Uri 有效期5分钟
                    }   
                    else
                    {
    
                        imgurl = string.Format("http://{0}.oss.aliyuncs.com/{1}", bucketName, name);
                    }
                    return true;
                }
                catch (Exception ex)
                {
                    return false;
                    throw new Exception(ex.Message);
                }
    
                //Response.Write(string.Format("<img src={0}>", imgurl));
            }
    
    
    
    
    
            /// <summary>
            /// 类型
            /// </summary>
            /// <param name="FilenameExtension"></param>
            /// <returns></returns>
            public static string ContentType(String FilenameExtension)
            {
                string type = "";
                if (FilenameExtension.Equals("BMP") || FilenameExtension.Equals("bmp"))
                {
                    type = "image/bmp";
                }
                if (FilenameExtension.Equals("GIF") || FilenameExtension.Equals("gif"))
                {
                    type = "image/gif";
                }
                if (FilenameExtension.Equals("JPEG") || FilenameExtension.Equals("jpeg") ||
                    FilenameExtension.Equals("JPG") || FilenameExtension.Equals("jpg") ||
                    FilenameExtension.Equals("PNG") || FilenameExtension.Equals("png"))
                {
                    type = "image/jpeg";
                }
                if (FilenameExtension.Equals("HTML") || FilenameExtension.Equals("html"))
                {
                    type = "text/html";
                }
                if (FilenameExtension.Equals("TXT") || FilenameExtension.Equals("txt"))
                {
                    type = "text/plain";
                }
                if (FilenameExtension.Equals("VSD") || FilenameExtension.Equals("vsd"))
                {
                    type = "application/vnd.visio";
                }
                if (FilenameExtension.Equals("PPTX") || FilenameExtension.Equals("pptx") ||
                    FilenameExtension.Equals("PPT") || FilenameExtension.Equals("ppt"))
                {
                    type = "application/vnd.ms-powerpoint";
                }
                if (FilenameExtension.Equals("DOCX") || FilenameExtension.Equals("docx") ||
                    FilenameExtension.Equals("DOC") || FilenameExtension.Equals("doc"))
                {
                    type = "application/msword";
                }
                if (FilenameExtension.Equals("XML") || FilenameExtension.Equals("xml"))
                {
                    type = "text/xml";
                }
                if (FilenameExtension.Equals("PFD") || FilenameExtension.Equals("pdf"))
                {
                    type = "application/pdf";
                }
    
                return type;
            }
    
    
    
            /// <summary>
            /// 创建模拟文件夹
            /// </summary>
            public static void CreateFolderName()
            {
                // 初始化OssClient
                ossClient = new OssClient(endpoint, accessid, accesskey);
    
                const string key = "yourfolder/";
                using (MemoryStream ms = new MemoryStream())
                {
                    ossClient.PutObject(bucketName, key, ms);
                }
            }
    
    
    
    
            /// <summary>
            /// 获取所有图片
            /// </summary>
            public static OSSInfoListModel Bind()
            {
                var model = new OSSInfoListModel();
                ossClient = new OssClient(accessid, accesskey);
                var buck = ossClient.ListBuckets();
                var listing = ossClient.ListObjects(bucketName);
                model.Bucket = buck;
                model.ObjectListing = listing;
                return model;
    
            }
    
    
            /// <summary>
            /// 删除
            /// </summary>
            /// <param name="bucketname"></param>
            /// <param name="key"></param>
            /// <returns></returns>
            public static bool Delete(string bucketname, string key)
            {
                try
                {
                    ossClient = new OssClient(accessid, accesskey);
                    ossClient.DeleteObject(bucketname, key);
                    return true;
    
                }
                catch (Exception)
                {
                    return false;
                    throw;
                }
    
            }
    
    
    
            /// <summary>
            /// 新建Bucket
            /// </summary>
            /// <param name="bucketName"></param>
            /// <returns></returns>
            public static bool CreateBucket(string bucketName)
            {
                try
                {
                    // 初始化OssClient
                    ossClient = new OssClient(endpoint, accessid, accesskey);
                    // 新建一个Bucket
                    ossClient.CreateBucket(bucketName);
                    return true;
    
                }
                catch (Exception)
                {
                    return false;
                    throw;
                }
            }
    
            /// <summary>
            /// 获取所有的Bucket
            /// </summary>
            /// <returns></returns>
            public static IEnumerable<Bucket> GetAllBucket()
            {
                // 初始化OssClient
                ossClient = new OssClient(endpoint, accessid, accesskey);
                var buckets = ossClient.ListBuckets();
                return buckets;
            }
    
            /// <summary>
            /// 判断Bucket是否存在
            /// </summary>
            /// <param name="name"></param>
            /// <returns></returns>
            public static bool GetBucketBybucketName(string name)
            {
                // 初始化OssClient
                ossClient = new OssClient(endpoint, accessid, accesskey);
                var exist = ossClient.ListBuckets().Any(b => b.Name.Equals(name));
                return exist;
            }
    
    
            /// <summary>
            /// 删除Bucket
            /// </summary>
            /// <param name="name"></param>
            public static bool DeleteBucket(string name)
            {
                try
                {
                    // 初始化OssClient
                    ossClient = new OssClient(endpoint, accessid, accesskey);
                    ossClient.DeleteBucket(name);
                    return true;
    
                }
                catch (Exception)
                {
                    return false;
                    throw;
                }
            }
    
            /// <summary>
            /// 使用CNAME进行访问
            /// </summary>
            public static void UseCName(HttpPostedFileBase file)
            {
                // 比如你的域名"http://my-cname.com"CNAME指向你的bucket域名"mybucket.oss-cn-hangzhou.aliyuncs.com"
                ossClient = new OssClient("http://my-cname.com/", accessid, accesskey);
                var meta = new ObjectMetadata();
                meta.CacheControl = "max-age=315360000";
                meta.ContentType = ContentType((file.FileName).Substring(file.FileName.LastIndexOf(".")));
                var stream = file.InputStream;
                string name = "test" + "/" + file.FileName;
                PutObjectResult result = ossClient.PutObject(bucketName, name, stream, meta);
            }
    
    
            /// <summary>
            /// 创建文件夹
            /// </summary>
            public static void CreateFolder()
            {
    
                // 初始化OssClient
                var client = new OssClient(endpoint, accessid, accesskey);
                // Note: key treats as a folder and must end with a slash.
                const string key = "yourfolder/";
                // put object with zero bytes stream.
                using (MemoryStream ms = new MemoryStream())
                {
                    client.PutObject(bucketName, key, ms);
                }
            }
    
        }

    为了更加易用我对一些基本参数进行了Web.Config的配置

    代码实现如下:

     public class OSSConfigHandler : IConfigurationSectionHandler
        {
    
            public object Create(object parent, object configContext, System.Xml.XmlNode section)
            {
                if (section == null)
    
                    throw new ArgumentNullException("section");
    
                OSSConfiguation config;
    
                if (parent != null)
                {
    
                    var parentConfig = (OSSConfiguation) parent;
    
                    config = (OSSConfiguation) ((ICloneable) parentConfig).Clone();
    
                }
                else
                {
                    config = new OSSConfiguation();
                }
    
                var services = new OSSConfigService();
    
                for (int i = 0; i < section.ChildNodes.Count; i++)
                {
                    try
                    {
                        XmlNode element = section.ChildNodes.Item(i); 
                        if (element.NodeType == XmlNodeType.Comment) continue;
                        if (element.Name == "OssConfigService")
                        {
                           
                            var bucketName = element.Attributes["bucketName"] != null ? element.Attributes["bucketName"].Value : "";
                            var accessid = element.Attributes["accessid"] != null ? element.Attributes["accessid"].Value : "";
                            var accesskey = element.Attributes["accesskey"] != null ? element.Attributes["accesskey"].Value : "";
                            var endpoint = element.Attributes["endpoint"] != null ? element.Attributes["endpoint"].Value : "";
                            var folder = element.Attributes["folder"] != null ? element.Attributes["folder"].Value : "";
                            var Islocal = element.Attributes["Islocal"] != null ? element.Attributes["Islocal"].Value : "";
                            var localPath = element.Attributes["localPath"] != null ? element.Attributes["localPath"].Value : "";
                            var imgBucket = element.Attributes["imgBucket"] != null ? element.Attributes["imgBucket"].Value : "";
                            var pdfBucket = element.Attributes["pdfBucket"] != null ? element.Attributes["pdfBucket"].Value : "";
    
                            services.bucketName = bucketName;
                            services.accessid = accessid;
                            services.accesskey = accesskey;
                            services.endpoint = endpoint;
                            services.folder = folder;
                            services.Islocal = Islocal;
                            services.localPath = localPath;
                            services.imgBucket = imgBucket;
                            services.pdfBucket = pdfBucket;
    
    
                        }
                    }
                    catch (Exception exception)
                    {
    
                    }
    
                }
    
                config.OssConfigService = services;
                return config;
            }
        }
     /// <summary>
        /// 
        /// </summary>
        public class OSSConfigService
        {
            public OSSConfigService()
            {
    
            }
    
    
            /// <summary>
            /// 
            /// </summary>
            public string bucketName { get; set; }
    
            /// <summary>
            /// 
            /// </summary>
            public string accessid { get; set; }
    
            /// <summary>
            /// 
            /// </summary>
            public string accesskey { get; set; }
    
            /// <summary>
            /// 
            /// </summary>
            public string endpoint { get; set; }
    
            /// <summary>
            /// 文件夹
            /// </summary>
            public string folder { get; set; }
    
            /// <summary>
            /// 
            /// </summary>
            public string  Islocal { get; set; }
    
            /// <summary>
            /// 
            /// </summary>
            public string localPath { get; set; }
    
            /// <summary>
            /// 
            /// </summary>
            public string imgBucket { get; set; }
    
            /// <summary>
            /// 
            /// </summary>
            public string pdfBucket { get; set; }
    
         
    
        }
    public class OSSConfiguation : ICloneable
        {
    
            public OSSConfiguation()
            {
                OssConfigService = new OSSConfigService();
            }
    
            /// <summary>
            /// 
            /// </summary>
            public OSSConfigService OssConfigService { get; set; }
    
            public object Clone()
            {
                throw new NotImplementedException();
            }
        }

    Web.Config 的配置下 

    Controller 调用

      public class HomeController : Controller
        {
    
            public HomeController()
            {
    
            }
    
    
            /// <summary>
            /// 
            /// </summary>
            /// <returns></returns>
            public ActionResult Index()
            {
               var model= UploadFileHelper.Bind();
               return View(model);
            }
    
    
    
            /// <summary>
            /// 上传
            /// </summary>
            /// <returns></returns>
            public ActionResult FileSubmit()
            {
                var Picture = Request.Files[0];
                var PDF = Request.Files[1];
                bool s = false;
                var files = Request.Files;
                HttpPostedFileBase postedfile=null;
                for (int i = 0; i < files.Count; i++)
                {
                    if (files[i].FileName.Length>0)
                    {
    
                         postedfile = files[i];
                          s = UploadFileHelper.UploadFile(postedfile);
                    }
    
                }
    
                if (s)
                {
                    return Content("上传成功");
                }
                else
                {
                    return Content("上传失败");
                }
                
            }
    
    
            /// <summary>
            ///删除
            /// </summary>
            /// <param name="key"></param>
            /// <param name="bucketname"></param>
            /// <returns></returns>
            public void  Delete(string key, string bucketname)
            {
                if(UploadFileHelper.Delete(bucketname, key))
                {
                      Response.Write("删除成功");
                  
                }
                else
                {
                    Response.Write("删除失败");
                }
            }
    
    
    
          
    
            /// <summary>
            /// 列表Bucket
            /// </summary>
            /// <returns></returns>
            public ActionResult ListBucket()
            {
                var buckets1 = UploadFileHelper.GetAllBucket();
                return View(buckets1);
            }
    
    
            /// <summary>
            ///删除Bucket
            /// </summary>
            /// <returns></returns>
            public void DeleteBucket(string bucketname)
            {
                if (UploadFileHelper.DeleteBucket(bucketname))
                {
                    Response.Write("删除成功");
                }
                else
                {
                    Response.Write("删除失败");
                }
            }
    
    
            /// <summary>
            /// 
            /// </summary>
            /// <returns></returns>
            [HttpPost]
            public void CreateBucket()
            {
                string name = Request.Form["bucketname"];
                if (UploadFileHelper.CreateBucket(name))
                {
                    Response.Write("创建成功");
                }
                else
                {
                    Response.Write("创建失败");
                }
            }
    
    
        }

    View:

     @using (Html.BeginForm("FileSubmit", "Home", FormMethod.Post, new {enctype = "multipart/form-data"}))
            {
    
                <input type="file" name="Picture" id="Picture" />
                <input type="file" name="PDF" id="PDF" />
    
                <button type="submit">上传</button>
    
            }

    此文为个人见解

  • 相关阅读:
    WPF中从资源中检索指定路径的图片文件
    Prometheus
    py2exe的安装和使用
    .net HttpWebRequest发送cookie失败
    贷款计算测试
    关于input清空之后组件试图不更新解决办法 emmiter.js dispatch使用
    JS对象对象构造器
    【golang笔记】字符串
    MYSQL 字符集
    2022年2月的一些碎碎念
  • 原文地址:https://www.cnblogs.com/ywsheng/p/4760987.html
Copyright © 2020-2023  润新知