在Abp 使用 阿里云的oss

64 篇文章 0 订阅

 

代码部分:

1.新建一个控制台程序

2.nuget安装包和项目引用.Core

3.AbpSetting表

4.修改配置

代码:

--AppSettingProvider.cs 

// AppSettingProvider.cs 


using System.Collections.Generic;
using System.Linq;
using Abp.Configuration;

namespace DRMS.Configuration
{
    public class AppSettingProvider : SettingProvider
    {
        private readonly ISettingStore _settingStore;

        public AppSettingProvider(ISettingStore settingStore)
        {
            _settingStore = settingStore;
        }
        public override IEnumerable<SettingDefinition> GetSettingDefinitions(SettingDefinitionProviderContext context)
        {
            var allSettings = _settingStore.GetAllList(null, null);

            return allSettings.Select(x => new SettingDefinition(x.Name, string.Empty));
        }
    }
}

--IStorage.cs

//IStorage.cs

using System;
using System.Collections.Generic;
using System.IO;
using System.Text;

namespace DRMS.Storage
{
    public interface IStorage
    {
        string PutObject(Stream fileStream, string fileName, out string key);

        void DeleteObject(string key);
    }
}

--AliyunStorage.cs

//AliyunStorage.cs

using Abp.Configuration;
using Aliyun.OSS;
using Microsoft.Extensions.Configuration;
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;

namespace DRMS.Storage
{
    public class AliyunStorage : IStorage
    {
        private readonly string _endpoint;
        private readonly string _accessKeyId;
        private readonly string _accessKeySecret;
        private readonly string _bucketDomain;
        private readonly string _bucketName;

        public AliyunStorage(ISettingManager settingManager)
        {
            _endpoint = settingManager.GetSettingValue("Oss.endpoint");
            _accessKeyId = settingManager.GetSettingValue("Oss.accessKeyId");
            _accessKeySecret = settingManager.GetSettingValue("Oss.accessKeySecret");
            _bucketName = settingManager.GetSettingValue("Oss.bucketName");
            _bucketDomain = settingManager.GetSettingValue("Oss.bucketDomain");
        }

        public string PutObject(Stream fileStream, string fileName, out string key)
        {
            OssClient client = new OssClient(_endpoint, _accessKeyId, _accessKeySecret);
            key = Guid.NewGuid().ToString();
            int extentionIndex = fileName.LastIndexOf('.');
            if (extentionIndex > 0)
            {
                key += $"{fileName.Substring(extentionIndex)}";
            }

            var result = client.PutObject(_bucketName, key, fileStream);
            return $"{_bucketDomain}/{key}";
        }

        public void DeleteObject(string key)
        {
            OssClient client = new OssClient(_endpoint, _accessKeyId, _accessKeySecret);
            client.DeleteObject(_bucketName, key);
        }

    }
}

 

报错:

ERROR 2020-11-18 14:02:18,349 [47   ] Mvc.ExceptionHandling.AbpExceptionFilter - ComponentActivator: could not instantiate DRMS.Storage.AliyunStorage
Castle.MicroKernel.ComponentActivator.ComponentActivatorException: ComponentActivator: could not instantiate DRMS.Storage.AliyunStorage
 ---> System.Exception: Could not instantiate DRMS.Storage.AliyunStorage.
 ---> System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation.
 ---> Abp.AbpException: There is no setting defined with name: Oss.endpoint
   at Abp.Configuration.SettingDefinitionManager.GetSettingDefinition(String name)
   at Abp.Configuration.SettingManager.GetSettingValueInternal(String name, Nullable`1 tenantId, Nullable`1 userId, Boolean fallbackToDefault)
   at Abp.Configuration.SettingManager.GetSettingValue(String name)
   at Castle.Proxies.SettingManagerProxy.GetSettingValue_callback(String name)
   at Castle.Proxies.Invocations.ISettingManager_GetSettingValue.InvokeMethodOnTarget()
   at Castle.DynamicProxy.AbstractInvocation.Proceed()
   at Castle.DynamicProxy.AbstractInvocation.Proceed()
   at Castle.Proxies.SettingManagerProxy.GetSettingValue(String name)
   at DRMS.Storage.AliyunStorage..ctor(ISettingManager settingManager) in F:\DRMS\riching-drms-service\src\DRMS.Storage\AliyunStorage.cs:line 21
   --- End of inner exception stack trace ---
   at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor, Boolean wrapExceptions)
   at System.Reflection.RuntimeConstructorInfo.Invoke(BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture)
   at Castle.Core.Internal.ReflectionUtil.Instantiate[TBase](Type subtypeofTBase, Object[] ctorArgs)
   --- End of inner exception stack trace ---
   at Castle.Core.Internal.ReflectionUtil.Instantiate[TBase](Type subtypeofTBase, Object[] ctorArgs)
   at Castle.MicroKernel.ComponentActivator.DefaultComponentActivator.CreateInstanceCore(ConstructorCandidate constructor, Object[] arguments, Type implType)
   --- End of inner exception stack trace ---
   at Castle.MicroKernel.ComponentActivator.DefaultComponentActivator.CreateInstanceCore(ConstructorCandidate constructor, Object[] arguments, Type implType)
   at Castle.MicroKernel.ComponentActivator.DefaultComponentActivator.CreateInstance(CreationContext context, ConstructorCandidate constructor, Object[] arguments)

这错误时因为AppSettingProvider.cs 没配置好

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值