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);
}