C# 阿里雲對象存儲OSS創建、刪除、上傳代碼實現

一、開始接入

1、Nuget安裝Aliyun.OSS.SDK;

2、代碼實現:

/// <summary>
/// 阿里雲對象存儲服務
/// </summary>
public class AliyunOss
{
	const string accessKeyId = "";
	const string accessKeySecret = "";
	const string endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
	public const string cdn = "http://test.oss-cn-hangzhou.aliyuncs.com/";
	public static string bucketName = "test";

	/// <summary>
	/// oss客戶端對象
	/// </summary>
	private OssClient ossClient;
	/// <summary>
	/// 配置
	/// </summary>
	public ClientConfiguration ossConfig;
	/// <summary>
	/// 構造函數
	/// </summary>
	public AliyunOss()
	{
		//默認配置
		ossConfig = new ClientConfiguration();
		//
		ossClient = new OssClient(endpoint, accessKeyId, accessKeySecret, ossConfig);
	}

	#region 存儲空間相關操作
	/// <summary>
	/// 獲取賬戶下所有存儲空間名稱
	/// </summary>
	/// <returns></returns>
	public List<string> GetAllBucket()
	{
		try
		{
			var buckets = ossClient.ListBuckets();
			if (buckets != null && buckets.Count() > 0)
			{
				return buckets.Select(e => e.Name).ToList();
			}
			else
			{
				return new List<string>();
			}
		}
		catch (Exception ex)
		{
			throw ex;
		}
	}
	/// <summary>
	/// 在OSS中創建一個新的存儲空間。
	/// </summary>
	/// <param name="bucketName">要創建的存儲空間的名稱</param>
	public void CreateBucket(string bucketName)
	{
		try
		{
			//BucketName具有全局唯一性。
			var exist = ossClient.DoesBucketExist(bucketName);
			if (!exist)
			{
				ossClient.CreateBucket(bucketName);
			}
		}
		catch (Exception ex)
		{
			throw ex;
		}
	}
	/// <summary>
	/// 刪除存儲空間
	/// </summary>
	/// <param name="bucketName"></param>
	public void DeleteBucket(string bucketName)
	{
		try
		{
			ossClient.DeleteBucket(bucketName);
		}
		catch (Exception ex)
		{
			throw ex;
		}
	}
	#endregion

	#region 文件相關操作
	/// <summary>
	/// 上傳本地的文件到指定的OSS的存儲空間
	/// </summary>
	/// <param name="bucketName">指定的存儲空間名稱</param>
	/// <param name="key">文件的在OSS上保存的名稱</param>
	/// <param name="fileToUpload">指定上傳文件的本地完整路徑</param>
	public string PutObject(string bucketName, string key, string fileToUpload)
	{
		try
		{
			var result = ossClient.PutObject(bucketName, key, fileToUpload);
			return result.ETag;
		}
		catch (Exception ex)
		{
			throw ex;
		}
	}
	/// <summary>
	/// 上傳文件到指定的OSS的存儲空間
	/// </summary>
	/// <param name="bucketName">指定的存儲空間名稱</param>
	/// <param name="key">文件的在OSS上保存的名稱</param>
	/// <param name="binaryData">文件字節流</param>
	/// <returns></returns>
	public string PutObject(string bucketName, string key, byte[] binaryData)
	{
		try
		{
			MemoryStream requestContent = new MemoryStream(binaryData);
			var result = ossClient.PutObject(bucketName, key, requestContent);
			return result.ETag;
		}
		catch (Exception ex)
		{
			throw ex;
		}
	}
	/// <summary>
	/// 下載文件流
	/// </summary>
	/// <param name="bucketName">指定的存儲空間名稱</param>
	/// <param name="key">文件的在OSS上保存的名稱</param>
	public byte[] DownLoadObject(string bucketName, string key)
	{
		try
		{
			var obj = ossClient.GetObject(bucketName, key);
			if (obj != null)
			{
				using (var requestStream = obj.Content)
				{
					byte[] bytes = new byte[requestStream.Length];
					requestStream.Read(bytes, 0, bytes.Length);
					requestStream.Seek(0, SeekOrigin.Begin);
					return bytes;
				}
			}
			return null;
		}
		catch (Exception ex)
		{
			throw ex;
		}
	}
	/// <summary>
	/// 刪除指定的文件
	/// </summary>   
	/// <param name="bucketName">文件所在存儲空間的名稱</param>
	/// <param name="key">待刪除的文件名稱</param>
	public void DeleteObject(string bucketName, string key)
	{
		try
		{
			ossClient.DeleteObject(bucketName, key);
		}
		catch (Exception ex)
		{
			throw ex;
		}
	}
	/// <summary>
	/// 複製文件
	/// </summary>
	/// <param name="sourceBucket">源Bucket</param>
	/// <param name="sourceObject">源key</param>
	/// <param name="targetBucket">目標Bucket</param>
	/// <param name="targetObject">目標Key</param>
	public void CopyObject(string sourceBucket, string sourceObject, string targetBucket, string targetObject)
	{
		try
		{
			var metadata = new ObjectMetadata();
			metadata.AddHeader("mk1", "mv1");
			metadata.AddHeader("mk2", "mv2");
			var req = new CopyObjectRequest(sourceBucket, sourceObject, targetBucket, targetObject)
			{

				NewObjectMetadata = metadata
			};
			// 拷貝文件。
			ossClient.CopyObject(req);
		}
		catch (Exception ex)
		{

			throw ex;
		}
	}
	/// <summary>
	/// URL簽名授權訪問(上傳)
	/// </summary>
	/// <param name="bucketName"></param>
	/// <param name="key"></param>
	/// <returns></returns>
	public string[] GetUploadFileOssUrl(string bucketName, string key)
	{
		// 生成PUT方法的URL
		var req = new GeneratePresignedUriRequest(bucketName, key, SignHttpMethod.Put)
		{
			Expiration = DateTime.Now.AddMinutes(30),
			ContentType = "image/*"
		};
		var uri = ossClient.GeneratePresignedUri(req);
		string AbsolutePath = cdn + uri.AbsolutePath;
		string AbsoluteUri = uri.AbsoluteUri;
		return new string[] { AbsolutePath, AbsoluteUri };
	}
	/// <summary>
	/// URL簽名授權訪問(刪除)
	/// </summary>
	/// <param name="bucketName"></param>
	/// <param name="key"></param>
	/// <returns></returns>
	public string GetDeleteFileOssUrl(string bucketName, string key)
	{
		// 生成PUT方法的URL
		var req = new GeneratePresignedUriRequest(bucketName, key, SignHttpMethod.Delete)
		{
			Expiration = DateTime.Now.AddMinutes(15),
			ContentType = "image/*"
		};
		var uri = ossClient.GeneratePresignedUri(req);
		return uri.AbsolutePath;
	}
	#endregion
}

本文屬於個人原創作品、個人總結,謝絕轉載、抄襲。如果您有疑問或者希望溝通交流,可以聯繫QQ:865562060。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章