124 lines
5.0 KiB
C#
124 lines
5.0 KiB
C#
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);
|
||
//}
|
||
}
|
||
}
|