CloudGamingAdmin/admin-server/CloudGaming.Code.Aliyun/AliyunConfigExtend.cs
2024-11-15 02:58:48 +08:00

124 lines
5.0 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Aliyun.OSS;
using NPOI.HPSF;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.AccessControl;
using System.Text;
using System.Threading.Tasks;
namespace CloudGaming.Code.Aliyun
{
/// <summary>
/// 阿里云扩展
/// </summary>
public static class AliyunConfigExtend
{
private static readonly Dictionary<string, string> MimeTypes = new Dictionary<string, string>(StringComparer.InvariantCultureIgnoreCase)
{
{ ".txt", "text/plain" },
{ ".html", "text/html" },
{ ".htm", "text/html" },
{ ".css", "text/css" },
{ ".js", "application/javascript" },
{ ".json", "application/json" },
{ ".xml", "application/xml" },
{ ".jpg", "image/jpeg" },
{ ".jpeg", "image/jpeg" },
{ ".png", "image/png" },
{ ".gif", "image/gif" },
{ ".bmp", "image/bmp" },
{ ".webp", "image/webp" },
{ ".svg", "image/svg+xml" },
{ ".pdf", "application/pdf" },
{ ".doc", "application/msword" },
{ ".docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document" },
{ ".xls", "application/vnd.ms-excel" },
{ ".xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" },
{ ".ppt", "application/vnd.ms-powerpoint" },
{ ".pptx", "application/vnd.openxmlformats-officedocument.presentationml.presentation" },
{ ".zip", "application/zip" },
{ ".rar", "application/x-rar-compressed" },
{ ".7z", "application/x-7z-compressed" },
{ ".mp3", "audio/mpeg" },
{ ".wav", "audio/wav" },
{ ".mp4", "video/mp4" },
{ ".avi", "video/x-msvideo" },
{ ".mov", "video/quicktime" }
};
public static string GetContentType(string fileName)
{
if (string.IsNullOrEmpty(fileName))
throw new ArgumentException("文件名称不能为空", nameof(fileName));
string extension = System.IO.Path.GetExtension(fileName);
if (MimeTypes.TryGetValue(extension, out string contentType))
{
return contentType;
}
return "application/octet-stream"; // 默认值
}
/// <summary>
/// 获取上传地址
/// </summary>
/// <param name="aliyunOssConfig">配置</param>
/// <param name="objectName">上传图片名称</param>
/// <param name="contentType">上传类型</param>
/// <returns></returns>
public static string GeneratePresignedUri(this AliyunOssConfig aliyunOssConfig, string objectName)
{
var contentType = GetContentType(objectName);
return GeneratePresignedUri(aliyunOssConfig, objectName, contentType);
}
/// <summary>
/// 获取上传地址
/// </summary>
/// <param name="aliyunOssConfig">配置</param>
/// <param name="objectName">上传图片名称</param>
/// <param name="contentType">上传类型</param>
/// <returns></returns>
public static string GeneratePresignedUri(this AliyunOssConfig aliyunOssConfig, string objectName, string contentType)
{
if (aliyunOssConfig == null)
{
throw new NullReferenceException("AliyunOssConfig不能为空");
}
// 创建OSSClient实例
var ossClient = new OssClient(aliyunOssConfig.EndPoint, aliyunOssConfig.AccessKeyId, aliyunOssConfig.AccessKeySecret);
// 生成签名URL
var generatePresignedUriRequest = new GeneratePresignedUriRequest(aliyunOssConfig.BucketName, objectName, SignHttpMethod.Put)
{
Expiration = DateTime.Now.AddHours(1),
ContentType = contentType
};
var signedUrl = ossClient.GeneratePresignedUri(generatePresignedUriRequest);
return signedUrl.ToString();
}
//public static AlibabaCloud.SDK.Dysmsapi20170525.Client CreateClient(this AliyunOssConfig aliyunOssConfig)
//{
// // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
// // 建议使用更安全的 STS 方式更多鉴权访问方式请参见https://help.aliyun.com/document_detail/378671.html。
// AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config
// {
// // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
// AccessKeyId = aliyunOssConfig.AccessKeyId,
// // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
// AccessKeySecret = aliyunOssConfig.AccessKeySecret,
// };
// // Endpoint 请参考 https://api.aliyun.com/product/Dysmsapi
// config.Endpoint = "dysmsapi.aliyuncs.com";
// return new AlibabaCloud.SDK.Dysmsapi20170525.Client(config);
//}
}
}