COSHelper 上传图片到腾讯云

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using COSXML;
using COSXML.Auth;
using COSXML.Model.Object;
using COSXML.Model.Bucket;
using COSXML.CosException;
using COSXML.Transfer;
using System.IO;
using JoyTools;

namespace TencentBL
{
    public class COSHelper
    {
        static string APPID = "APPID ";
        static string SecretId = "AKIDtYzA6nEPL1SdYFivsa2FCtiKm4CC2jGh1";
        static string SecretKey = "Y3XWj3S6xptGnN11111XXXg93GmkEHeE";
        static string Region = "ap-shanghai";
        static string BucketName = "yjb";
        /// <summary>
        /// 获取后台图片上传的前缀
        /// </summary>
        /// <param name="schoolGroupID"></param>
        /// <param name="schoolId"></param>
        /// <returns></returns>
        public static string GetAddress(long schoolGroupID, long schoolId)
        {
            return "/admin/" + schoolGroupID.ToString() + "-" + schoolId.ToString();
        }
        public static string Upload(string base64str, string fileaddress)
        {
            try
            {   //初始化 CosXmlConfig 
                CosXml cosXml = GetBasicInfo();
                byte[] data = new byte[1024];
                if (!string.IsNullOrEmpty(base64str))
                {
                    TransferUploadBytes(BucketName, cosXml, Convert.FromBase64String(base64str), fileaddress);
                    return "成功#" + fileaddress;
                }
                return "没有数据";
                //
            }
            catch (COSXML.CosException.CosClientException clientEx)
            {
                //请求失败
                WebUtility.Log("cos", "CosClientException: " + clientEx); return "失败";
            }
            catch (COSXML.CosException.CosServerException serverEx)
            {
                //请求失败
                WebUtility.Log("cos", "CosServerException: " + serverEx.GetInfo());
                return "失败";
            }

        }
        /// <summary>
        /// 获取文件的后缀名
        /// </summary>
        /// <param name="filename"></param>
        /// <returns></returns>
        public static string GetFileExtName(string filename)
        {
            if (string.IsNullOrEmpty(filename)) return null;
            string[] tmpName = filename.Split('.');
            string sufname = tmpName[tmpName.Length - 1];
            sufname = sufname.ToLower();
            return sufname;
        }

        private static CosXml GetBasicInfo()
        {
            string appid = APPID;//设置腾讯云账户的账户标识 APPID
            CosXmlConfig config = new CosXmlConfig.Builder()
              .IsHttps(true)  //设置默认 HTTPS 请求
              .SetRegion(Region)  //设置一个默认的存储桶地域
              .SetDebugLog(true)  //显示日志
              .Build();  //创建 CosXmlConfig 对象

            string secretId = SecretId; //"云 API 密钥 SecretId";
            string secretKey = SecretKey; //"云 API 密钥 SecretKey";
            long durationSecond = 600;  //每次请求签名有效时长,单位为秒
            QCloudCredentialProvider cosCredentialProvider = new DefaultQCloudCredentialProvider(
              secretId, secretKey, durationSecond);
            CosXml cosXml = new CosXmlServer(config, cosCredentialProvider);
            return cosXml;
        }

        /// <summary>
        /// 上传本地文件
        /// </summary>
        /// <param name="beforeaddress">上传文件夹的前缀</param>
        /// <param name="srcPath">本地地址</param>
        /// <param name="kzm">扩展名</param>
        public static string UploadLocalFile(string beforeaddress, string srcPath)
        {
            string appid = APPID;//设置腾讯云账户的账户标识 APPID
            CosXmlConfig config = new CosXmlConfig.Builder()
              .IsHttps(true)  //设置默认 HTTPS 请求
              .SetRegion(Region)  //设置一个默认的存储桶地域
              .SetDebugLog(true)  //显示日志
              .Build();  //创建 CosXmlConfig 对象

            string secretId = SecretId; //"云 API 密钥 SecretId";
            string secretKey = SecretKey; //"云 API 密钥 SecretKey";
            long durationSecond = 600;  //每次请求签名有效时长,单位为秒
            QCloudCredentialProvider cosCredentialProvider = new DefaultQCloudCredentialProvider(
              secretId, secretKey, durationSecond);
            Random rand = new Random();
            string kzm = GetFileExtName(srcPath);
            string key = beforeaddress + DateTime.Now.ToString("hhmmss") + rand.Next(1000, 9999).ToString() + "." + kzm; // 对象键
            PutObject(BucketName, key, srcPath, kzm, GetBasicInfo());
            return key;
        }

        /// <summary>
        /// 上传图片流
        /// </summary>
        /// <returns></returns>
        public static string PutObjectLocalStream(string beforeaddress, string filename, long contentLength, Stream fileStream)
        {
            try
            {
                CosXml cosXml = GetBasicInfo();
                // 存储桶名称,此处填入格式必须为 bucketname-APPID, 其中 APPID 获取参考 https://console.cloud.tencent.com/developer
                string bucket = BucketName + "-" + APPID; //格式:BucketName-APPID
                Random rand = new Random();
                string kzm = GetFileExtName(filename);
                string key = beforeaddress + DateTime.Now.ToString("hhmmss") + rand.Next(1000, 9999).ToString() + "." + kzm; // 对象键

                string[] fileendname = new string[] { "jpg", "jpeg", "png" };
                if (!StringHelper.IsEndWiths(filename.ToLower(), fileendname, true))
                {
                    throw new Exception("上传文件格式不正确!");
                }
                if (contentLength > 2097152)
                {
                    throw new Exception("文件大小不能超过2M");
                }
                // 打开只读的文件流对象
                // 组装上传请求,其中 offset sendLength 为可选参数
                long offset = 0L;
                long sendLength = fileStream.Length;
                PutObjectRequest request = new PutObjectRequest(bucket, key, fileStream, offset, sendLength);
                //设置进度回调
                request.SetCosProgressCallback(delegate (long completed, long total)
                {
                    Console.WriteLine(String.Format("progress = {0:##.##}%", completed * 100.0 / total));
                });
                //执行请求
                PutObjectResult result = cosXml.PutObject(request);
                //关闭文件流
                fileStream.Close();
                //对象的 eTag
                string eTag = result.eTag;
                //对象的 crc64ecma 校验值
                string crc64ecma = result.crc64ecma;
                //打印请求结果
                WebUtility.Log("cos", result.GetResultInfo());
                return key;
            }
            catch (COSXML.CosException.CosClientException clientEx)
            {
                throw new Exception(clientEx.Message);
            }
            catch (COSXML.CosException.CosServerException serverEx)
            {
                throw new Exception(serverEx.GetInfo());
            }
            return "";
        }
        /// <summary>
        /// 文件流上传文件
        /// </summary>
        /// <param name="name"></param>
        /// <param name="cosXml"></param>
        public static string PutObjectStream()
        {
            try
            {

                CosXml cosXml = GetBasicInfo();
                string kzm = "png";
                // 存储桶名称,此处填入格式必须为 bucketname-APPID, 其中 APPID 获取参考 https://console.cloud.tencent.com/developer
                string bucket = BucketName + "-" + APPID; //格式:BucketName-APPID
                Random rand = new Random();
                string srcPath = "blob:https://xxx.xxx.kim/88dd8a48-04bd-4cfa-b78a-aec2b2611e7d";

                srcPath = HttpContext.Current.Server.MapPath("/hj.jpg");

                string key = DateTime.Now.ToString("hhmmss") + rand.Next(1000, 9999).ToString() + "." + kzm; // 对象键
                // 打开只读的文件流对象
                FileStream fileStream = new FileStream(srcPath, FileMode.Open, FileAccess.Read);
                // 组装上传请求,其中 offset sendLength 为可选参数
                long offset = 0L;
                long sendLength = fileStream.Length;
                PutObjectRequest request = new PutObjectRequest(bucket, key, fileStream, offset, sendLength);
                //设置进度回调
                request.SetCosProgressCallback(delegate (long completed, long total)
                {
                    Console.WriteLine(String.Format("progress = {0:##.##}%", completed * 100.0 / total));
                });
                //执行请求
                PutObjectResult result = cosXml.PutObject(request);
                //关闭文件流
                fileStream.Close();
                //对象的 eTag
                string eTag = result.eTag;
                //对象的 crc64ecma 校验值
                string crc64ecma = result.crc64ecma;
                //打印请求结果
                WebUtility.Log("cos", result.GetResultInfo());
            }
            catch (COSXML.CosException.CosClientException clientEx)
            {
                //请求失败
                WebUtility.Log("cos", "CosClientException: " + clientEx);
            }
            catch (COSXML.CosException.CosServerException serverEx)
            {
                //请求失败
                WebUtility.Log("cos", "CosServerException: " + serverEx.GetInfo());
            }
            return "";
        }
        public static void TransferUploadBytes(string name, CosXml cosXml, byte[] data, string fileaddress)
        {
            try
            {
                // 存储桶名称,此处填入格式必须为 bucketname-APPID, 其中 APPID 获取参考 https://console.cloud.tencent.com/developer
                string bucket = name + "-" + APPID; //格式:BucketName-APPID
                Random rand = new Random();
                // string cosPath = DateTime.Now.ToString("hhmmss") + rand.Next(1000, 9999).ToString() + "." + kzm; // 对象键

                PutObjectRequest putObjectRequest = new PutObjectRequest(bucket, fileaddress, data);
                // 发起上传
                PutObjectResult result = cosXml.PutObject(putObjectRequest);
                WebUtility.Log("cos", result.GetResultInfo());
            }
            catch (COSXML.CosException.CosClientException clientEx)
            {
                //请求失败
                WebUtility.Log("cos", "CosClientException: " + clientEx);
            }
            catch (COSXML.CosException.CosServerException serverEx)
            {
                WebUtility.Log("cos", "CosServerException: " + serverEx.GetInfo());
            }
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="name"></param>
        /// <param name="srcPath"></param>
        /// <param name="cosXml"></param>
        public static void PutObject(string name, string key, string srcPath, string kzm, CosXml cosXml)
        {

            try
            {
                // 存储桶名称,此处填入格式必须为 bucketname-APPID, 其中 APPID 获取参考 https://console.cloud.tencent.com/developer
                string bucket = name + "-" + APPID; //格式:BucketName-APPID

                PutObjectRequest request = new PutObjectRequest(bucket, key, srcPath);
                //设置进度回调
                request.SetCosProgressCallback(delegate (long completed, long total)
                {
                    WebUtility.Log("cos", String.Format("progress = {0:##.##}%", completed * 100.0 / total));
                });
                //执行请求
                PutObjectResult result = cosXml.PutObject(request);
                //对象的 eTag
                string eTag = result.eTag;
            }
            catch (COSXML.CosException.CosClientException clientEx)
            {
                //请求失败
                WebUtility.Log("cos", "CosClientException: " + clientEx);
            }
            catch (COSXML.CosException.CosServerException serverEx)
            {
                //请求成功
                WebUtility.Log("cos", "CosServerException: " + serverEx.GetInfo());
            }

        }
        public void PutObject()
        {


           // 初始化 TransferConfig
           TransferConfig transferConfig = new TransferConfig();

           // 初始化 TransferManager
           TransferManager transferManager = new TransferManager(cosXml, transferConfig);

           String bucket = "examplebucket-1250000000"; //存储桶,格式:BucketName-APPID
           String cosPath = "exampleobject"; //对象在存储桶中的位置标识符,即称对象键
           String srcPath = @"temp-source-file";//本地文件绝对路径

           // 上传对象
           COSXMLUploadTask uploadTask = new COSXMLUploadTask(bucket, cosPath);
           uploadTask.SetSrcPath(srcPath);

           uploadTask.progressCallback = delegate(long completed, long total)
           {
               Console.WriteLine(String.Format("progress = {0:##.##}%", completed * 100.0 / total));
           };

           try
           { 
               COSXML.Transfer.COSXMLUploadTask.UploadTaskResult result = await
                 transferManager.UploadAsync(uploadTask);
               Console.WriteLine(result.GetResultInfo());
               string eTag = result.eTag;
           }
           catch (Exception e)
           {
               Console.WriteLine("CosException: " + e);
           }
        }
        public void CreateBucket(string name, CosXml cosXml)
        {
            string bucket = name + "-" + APPID; //格式:BucketName-APPID
            PutBucketRequest request = new PutBucketRequest(bucket);
            //执行请求
            PutBucketResult result = cosXml.PutBucket(request);
            //请求成功
            WebUtility.Log("cos", "CreateBucket" + result.GetResultInfo());

        }
        /// <summary>
        /// 删除单个文件
        /// </summary>
        public static void DeleteObject(string key)
        {
            try
            {
                CosXml cosXml = GetBasicInfo();
                string bucket = BucketName + "-" + APPID;
                //string key = "exampleobject"; //对象键
                DeleteObjectRequest request = new DeleteObjectRequest(bucket, key);
                //执行请求
                DeleteObjectResult result = cosXml.DeleteObject(request);
                //请求成功
            }
            catch (COSXML.CosException.CosClientException clientEx)
            {
                //请求失败
                WebUtility.Log("cos", "CosClientException: " + clientEx);
            }
            catch (COSXML.CosException.CosServerException serverEx)
            {
                //请求失败
                WebUtility.Log("cos", "CosServerException: " + serverEx.GetInfo());
            }

        }


        /// <summary>
        /// 删除多个文件
        /// </summary>
        public  static  void DeleteMultipleObjects(List<string> objects)
        {
            try
            {
                CosXml cosXml = GetBasicInfo();
                string bucket = BucketName + "-" + APPID; //格式:BucketName-APPID
                DeleteMultiObjectRequest request = new DeleteMultiObjectRequest(bucket);
                //设置返回结果形式
                request.SetDeleteQuiet(false);
                //对象key
                //string key = "exampleobject"; //对象键
                //List<string> objects = new List<string>();
                //objects.Add(key);
                request.SetObjectKeys(objects);
                //执行请求
                DeleteMultiObjectResult result = cosXml.DeleteMultiObjects(request);
                //请求成功
            }
            catch (COSXML.CosException.CosClientException clientEx)
            {
                //请求失败
                WebUtility.Log("cos", "CosClientException: " + clientEx);
            }
            catch (COSXML.CosException.CosServerException serverEx)
            {
                //请求失败
                WebUtility.Log("cos", "CosServerException: " + serverEx.GetInfo());
            }
        }
    }
}
 

调用

string CourseImg = "";
            if (this.fileupload.HasFile)
            {
                string imgName = fileupload.PostedFile.FileName;
                Stream stream = fileupload.PostedFile.InputStream;
                CourseImg = COSHelper.PutObjectLocalStream(COSHelper.GetAddress(this.OnlineUserInfo.SchoolGroupID, this.OnlineUserInfo.SchoolId) + "/courseimg/", imgName, fileupload.PostedFile.ContentLength, stream);
            }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值