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

论坛 期权论坛 脚本     
已经匿名di用户   2022-5-29 19:20   1569   0

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>

        }

此文为个人见解

转载于:https://www.cnblogs.com/ywsheng/p/4760987.html

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:81
帖子:4969
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP