using Aliyun.OSS;
using Aliyun.OSS.Common;
using Infrastructure;
using System;
using System.IO;
using System.Security.Cryptography;
namespace ZR.Common
{
public class AliyunOssHelper
{
static string accessKeyId = AppSettings.GetConfig("ALIYUN_OSS:KEY");
static string accessKeySecret = AppSettings.GetConfig("ALIYUN_OSS:SECRET");
static string endpoint = AppSettings.GetConfig("ALIYUN_OSS:REGIONID");
static string bucketName1 = AppSettings.GetConfig("ALIYUN_OSS:bucketName");
///
/// 上传到阿里云
///
///
/// 存储路径 eg: upload/2020/01/01/xxx.png
/// 存储桶 如果为空默认取配置文件
public static System.Net.HttpStatusCode PutObjectFromFile(Stream filestreams, string dirPath, string bucketName = "")
{
OssClient client = new(endpoint, accessKeyId, accessKeySecret);
if (string.IsNullOrEmpty(bucketName)) { bucketName = bucketName1; }
try
{
dirPath = dirPath.Replace("\\", "/");
PutObjectResult putObjectResult = client.PutObject(bucketName, dirPath, filestreams);
// Console.WriteLine("Put object:{0} succeeded", directory);
return putObjectResult.HttpStatusCode;
}
catch (OssException ex)
{
Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}",
ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
catch (Exception ex)
{
Console.WriteLine("Failed with error info: {0}", ex.Message);
}
return System.Net.HttpStatusCode.BadRequest;
}
///
/// 删除资源
///
///
///
///
public static System.Net.HttpStatusCode DeleteFile(string dirPath, string bucketName = "")
{
if (string.IsNullOrEmpty(bucketName)) { bucketName = bucketName1; }
try
{
OssClient client = new(endpoint, accessKeyId, accessKeySecret);
dirPath = dirPath.Replace("\\", "/");
DeleteObjectResult putObjectResult = client.DeleteObject(bucketName, dirPath);
return putObjectResult.HttpStatusCode;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
return System.Net.HttpStatusCode.BadRequest;
}
public static Stream DownloadFile(string dirPath, string bucketName = "", bool isEncrypted = false)
{
if (string.IsNullOrEmpty(bucketName))
{
bucketName = bucketName1;
}
try
{
OssClient client = new(endpoint, accessKeyId, accessKeySecret);
dirPath = dirPath.Replace("\\", "/");
var ossObject = client.GetObject(bucketName, dirPath);
if (isEncrypted)
{
try
{
var key = new byte[]
{
13, 57, 174, 2, 102, 26, 253, 192, 141, 38, 175, 244, 32, 86, 163, 25, 237, 134,
253, 162, 62, 203, 57, 52, 56, 157, 78, 155, 63, 28, 63, 255
};
var iv = new byte[]
{
137, 221, 84, 122, 104, 162, 48, 60, 108, 130, 170, 238, 186, 190, 111, 176
};
var aes = Aes.Create();
aes.Key = key;
aes.IV = iv;
var decryptor = aes.CreateDecryptor();
var cryptoStream = new CryptoStream(ossObject.Content, decryptor, CryptoStreamMode.Read);
return cryptoStream;
}
catch (Exception e)
{
// 处理异常,例如记录日志或抛出自定义异常
Console.WriteLine($"解密文件时发生异常: {e.Message}");
throw;
}
}
return ossObject.Content;
}
catch (Exception e)
{
Console.WriteLine(e);
throw;
}
}
}
}