sunpengfei
2025-08-14 052d0c2705c8ebf5d712eca4f9d2c1564cafe490
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
using Aliyun.Acs.Core;
using Aliyun.Acs.Core.Auth.Sts;
using Aliyun.Acs.Core.Http;
using Aliyun.Acs.Core.Profile;
using Aliyun.OSS;
using Furion;
using Furion.HttpRemote;
using Microsoft.AspNetCore.Http;
using Microsoft.CodeAnalysis;
using Microsoft.Extensions.Options;
using System;
using System.Diagnostics;
using System.IO;
using System.Threading.Tasks;
 
namespace FlexJobApi.Core
{
    /// <summary>
    /// 阿里云OSS工具
    /// </summary>
    public static class AliyunOSSUtils
    {
        public static GetAliyunOSSAcsQueryResult GetOSSAcs()
        {
            var options = App.GetOptions<AliyunOptions>().OSS;
            IClientProfile profile = DefaultProfile.GetProfile(options.RegionId, options.AccessKeyId, options.AccessSecret);
            DefaultAcsClient client = new DefaultAcsClient(profile);
            AssumeRoleRequest request = new AssumeRoleRequest();
 
            request.Method = MethodType.POST;
            request.RoleArn = options.RoleArn;
            request.RoleSessionName = options.RoleSessionName;
            request.Policy = options.Policy;
            request.DurationSeconds = options.DurationSeconds;
            AssumeRoleResponse response = client.GetAcsResponse(request);
            var result = new GetAliyunOSSAcsQueryResult()
            {
                Expiration = response.Credentials.Expiration,
                OssAccessKeyId = response.Credentials.AccessKeyId,
                OssAccessSecret = response.Credentials.AccessKeySecret,
                SecurityToken = response.Credentials.SecurityToken,
                RequestId = response.RequestId
            };
            return result;
        }
 
        /// <summary>
        /// 上传文件
        /// </summary>
        /// <param name="scene"></param>
        /// <param name="url"></param>
        /// <param name="filename"></param>
        /// <returns></returns>
        public static string Upload(string scene, string url, string filename = null)
        {
            var stream = App.GetRequiredService<IHttpRemoteService>().GetAsStream(url);
            return Upload(scene, stream, filename);
        }
 
        /// <summary>
        /// 上传文件
        /// </summary>
        /// <param name="scene"></param>
        /// <param name="file"></param>
        /// <param name="filename"></param>
        /// <returns></returns>
        public static string Upload(string scene, IFormFile file, string filename = null)
        {
            var stream = file.OpenReadStream();
            return Upload(scene, stream, filename);
        }
 
        /// <summary>
        /// 上传文件
        /// </summary>
        /// <param name="scene"></param>
        /// <param name="stream"></param>
        /// <param name="filename"></param>
        /// <returns></returns>
        public static string Upload(string scene, Stream stream, string filename = null)
        {
            var options = App.GetOptions<AliyunOptions>().OSS;
            var client = new OssClient(options.Endpoint, options.AccessKeyId, options.AccessSecret);
            var key = $"Resource/{scene}/{DateTime.Now:yyyy-MM-dd}/{filename}";
            client.PutObject(options.BucketName, key, stream);
            return key;
        }
 
        /// <summary>
        /// 获取Url
        /// </summary>
        /// <param name="url"></param>
        /// <param name="process"></param>
        /// <returns></returns>
        public static string GetUrl(string url, string process = null)
        {
            var options = App.GetOptions<AliyunOptions>().OSS;
            var client = new OssClient(options.Endpoint, options.AccessKeyId, options.AccessSecret);
            var req = new GeneratePresignedUriRequest(options.BucketName, url, SignHttpMethod.Get)
            {
                Expiration = DateTime.Now.AddHours(1),
                Process = process
            };
            url = client.GeneratePresignedUri(req).ToString();
            return url;
        }
    }
}