Beispiel #1
0
 /// <summary>
 ///
 /// </summary>
 public BucketProvider(QiNiuStorageConfig qiNiuConfig)
 {
     _qiNiuConfig     = qiNiuConfig;
     _storageProvider = new StorageProvider(qiNiuConfig);
     _jsonProvider    = new NewtonsoftJsonProvider();
     _httpClient      = new HttpClient("http://rs.qbox.me");
 }
        /// <summary>
        ///
        /// </summary>
        public BaseStorageProvider(ILogService logService, QiNiuStorageConfig qiNiuConfig)
        {
            _logService = logService;

            QiNiuConfig = qiNiuConfig;
            new QiNiuConfigValidator().Validate(qiNiuConfig).Check();

            Mac = new Mac(QiNiuConfig.AccessKey, QiNiuConfig.SecretKey);

            #region   策略

            PutPolicy = new PutPolicy();

            #region   成功后通知

            if (!string.IsNullOrEmpty(QiNiuConfig.CallbackBody))
            {
                PutPolicy.PersistentNotifyUrl = QiNiuConfig.PersistentNotifyUrl;
                PutPolicy.CallbackBody        = QiNiuConfig.CallbackBody;
                PutPolicy.CallbackBodyType    = QiNiuConfig.CallbackBodyType.GetDescription();
                PutPolicy.CallbackUrl         = QiNiuConfig.CallbackUrl;
            }

            if (!string.IsNullOrEmpty(QiNiuConfig.PersistentPipeline))
            {
                PutPolicy.PersistentPipeline = QiNiuConfig.PersistentPipeline;
            }

            #endregion


            #endregion
        }
Beispiel #3
0
 /// <summary>
 ///
 /// </summary>
 public BucketProvider(ILogger <BucketProvider> logger, QiNiuStorageConfig qiNiuConfig)
 {
     this._logger     = logger;
     _qiNiuConfig     = qiNiuConfig;
     _storageProvider = new StorageProvider(logger, qiNiuConfig);
     _jsonProvider    = new NewtonsoftJsonProvider();
     _httpClient      = new HttpClient("http://rs.qbox.me");
 }
Beispiel #4
0
        /// <summary>
        /// 加载七牛云存储
        /// </summary>
        /// <param name="services"></param>
        /// <param name="action">委托</param>
        public static IServiceCollection AddQiNiuStorage(this IServiceCollection services,
                                                         Action <QiNiuStorageConfig> action)
        {
            QiNiuStorageConfig qiNiuStorageConfig = new QiNiuStorageConfig();

            action.Invoke(qiNiuStorageConfig);
            return(services.AddQiNiuStorage(() => qiNiuStorageConfig));
        }
        /// <summary>
        /// 得到ChunkSize
        /// </summary>
        /// <param name="qiNiuConfig">七牛配置</param>
        /// <param name="chunkUnit">请求Unit</param>
        /// <returns></returns>
        internal static ChunkUnit GetChunkUnit(QiNiuStorageConfig qiNiuConfig, ChunkUnit chunkUnit)
        {
            if (chunkUnit != null)
            {
                return(chunkUnit);
            }

            return(qiNiuConfig.ChunkUnit);
        }
        /// <summary>
        /// 得到最大重试次数
        /// </summary>
        /// <param name="qiNiuConfig">七牛配置</param>
        /// <param name="maxRetryTime">最大重试次数</param>
        /// <returns></returns>
        internal static int GetMaxRetryTimes(QiNiuStorageConfig qiNiuConfig, int?maxRetryTime)
        {
            if (maxRetryTime != null)
            {
                return(maxRetryTime.Value);
            }

            return(qiNiuConfig.MaxRetryTimes);
        }
        /// <summary>
        /// 得到上传凭证
        /// </summary>
        /// <param name="qiNiuConfig">七牛配置文件</param>
        /// <param name="opsParam">上传策略</param>
        /// <param name="action"></param>
        /// <returns></returns>
        protected string GetUploadCredentials(QiNiuStorageConfig qiNiuConfig, UploadPersistentOpsParam opsParam,
                                              Action <PutPolicy> action = null)
        {
            PutPolicyConfig putPolicyConfig = new PutPolicyConfig(qiNiuConfig);

            putPolicyConfig.SetPutPolicy(opsParam);
            action?.Invoke(putPolicyConfig.GetPutPolicy());
            return(Auth.CreateUploadToken(qiNiuConfig.GetMac(), putPolicyConfig.GetPutPolicy().ToJsonString()));
        }
        /// <summary>
        /// 得到空间名
        /// </summary>
        /// <param name="qiNiuStorageConfig">七牛配置</param>
        /// <param name="bucket">空间名</param>
        /// <param name="optBucket">目标空间</param>
        /// <returns></returns>
        internal static string GetBucket(QiNiuStorageConfig qiNiuStorageConfig, string bucket, string optBucket)
        {
            if (!string.IsNullOrEmpty(optBucket))
            {
                return(optBucket);
            }

            return(GetBucket(qiNiuStorageConfig, bucket));
        }
Beispiel #9
0
 public void CheckQiNiuConfigValidaor()
 {
     QiNiuStorageConfig qiNiuStorageConfig = new QiNiuStorageConfig()
     {
         AccessKey        = "access_key",
         SecretKey        = "secretkey",
         Bucket           = "bucket",
         Host             = "host",
         Zones            = ZoneEnum.ZoneCnNorth,
         CallbackBodyType = CallbackBodyType.Json.Id
     };
 }
        /// <summary>
        /// 得到默认空间域
        /// </summary>
        /// <param name="qiNiuConfig">七牛配置</param>
        /// <param name="host">空间域</param>
        /// <returns></returns>
        internal static string GetHost(QiNiuStorageConfig qiNiuConfig, string host)
        {
            if (string.IsNullOrEmpty(host) == string.IsNullOrEmpty(qiNiuConfig.DefaultHost))
            {
                throw new BusinessException("请输入默认空间域");
            }

            if (!string.IsNullOrEmpty(host))
            {
                return(host);
            }

            return(qiNiuConfig.DefaultHost);
        }
        /// <summary>
        /// 得到空间名
        /// </summary>
        /// <param name="qiNiuStorageConfig">七牛配置</param>
        /// <param name="bucket">空间名</param>
        /// <returns></returns>
        internal static string GetBucket(QiNiuStorageConfig qiNiuStorageConfig, string bucket)
        {
            if (string.IsNullOrEmpty(bucket) && string.IsNullOrEmpty(qiNiuStorageConfig.DefaultBucket))
            {
                throw new BusinessException("请选择存储空间");
            }

            if (!string.IsNullOrEmpty(bucket))
            {
                return(bucket);
            }

            return(qiNiuStorageConfig.DefaultBucket);
        }
        /// <summary>
        /// 得到七牛配置文件
        /// </summary>
        /// <param name="qiNiuConfig">七牛配置</param>
        /// <param name="persistentOps">基础策略</param>
        /// <returns></returns>
        internal static Qiniu.Storage.Config GetConfig(QiNiuStorageConfig qiNiuConfig,
                                                       BasePersistentOps persistentOps)
        {
            var config = new Qiniu.Storage.Config
            {
                Zone          = GetZone(qiNiuConfig, persistentOps.Zone),
                UseHttps      = GetHttpsState(qiNiuConfig, persistentOps.IsUseHttps),
                UseCdnDomains = GetCdn(qiNiuConfig, persistentOps.UseCdnDomains),
                ChunkSize     = (Qiniu.Storage.ChunkUnit)(GetChunkUnit(qiNiuConfig, persistentOps.ChunkUnit).Id),
                MaxRetryTimes = GetMaxRetryTimes(qiNiuConfig, persistentOps.MaxRetryTimes),
            };

            config.UseHttps      = GetHttpsState(qiNiuConfig, persistentOps.IsUseHttps);
            config.UseCdnDomains = GetCdn(qiNiuConfig, persistentOps.UseCdnDomains);
            config.ChunkSize     = (Qiniu.Storage.ChunkUnit)(GetChunkUnit(qiNiuConfig, persistentOps.ChunkUnit).Id);
            config.MaxRetryTimes = GetMaxRetryTimes(qiNiuConfig, persistentOps.MaxRetryTimes);

            return(config);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="qiNiuConfig"></param>
        /// <param name="zone"></param>
        /// <param name="defaultZone">默认空间委托</param>
        /// <returns></returns>
        internal static ZoneEnum GetZonePrivate(QiNiuStorageConfig qiNiuConfig, int?zone,
                                                Func <ZoneEnum> defaultZone = null)
        {
            if (zone == null && qiNiuConfig.DefaultZones == null)
            {
                if (defaultZone == null)
                {
                    throw new BusinessException("请选择要操作的空间区域");
                }

                return(defaultZone.Invoke());
            }

            if (zone != null)
            {
                return((ZoneEnum)zone.Value);
            }

            return(qiNiuConfig.DefaultZones.Value);
        }
        /// <summary>
        /// 得到空间区域
        /// </summary>
        /// <param name="qiNiuConfig">七牛配置</param>
        /// <param name="zone">空间配置</param>
        /// <param name="defaultZone">默认空间区域</param>
        /// <returns></returns>
        internal static Qiniu.Storage.Zone GetZone(QiNiuStorageConfig qiNiuConfig, int?zone,
                                                   Func <ZoneEnum> defaultZone = null)
        {
            switch (GetZonePrivate(qiNiuConfig, zone, defaultZone))
            {
            case ZoneEnum.ZoneCnEast:
            default:
                return(Qiniu.Storage.Zone.ZONE_CN_East);

            case ZoneEnum.ZoneCnNorth:
                return(Qiniu.Storage.Zone.ZONE_CN_North);

            case ZoneEnum.ZoneCnSouth:
                return(Qiniu.Storage.Zone.ZONE_CN_South);

            case ZoneEnum.ZoneUsNorth:
                return(Qiniu.Storage.Zone.ZONE_US_North);

            case ZoneEnum.ZoneAsSingapore:
                return(Qiniu.Storage.Zone.ZONE_AS_Singapore);
            }
        }
Beispiel #15
0
        // This method gets called by the runtime. Use this method to add services to the container.
        // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
        public IServiceProvider ConfigureServices(IServiceCollection services)
        {
            services.AddMvc();

            services.AddCors(options =>
            {
                options.AddPolicy("CorsPolicy",
                                  builder => builder.AllowAnyOrigin()
                                  .AllowAnyMethod()
                                  .AllowAnyHeader());
            });
            services.AddQiNiuStorage(() =>
            {
                var config = new QiNiuStorageConfig("accessKey", "secretKey", ZoneEnum.ZoneCnSouth, "访问图片域名", "空间名");
                config.SetCallBack(EInfrastructure.Core.Configuration.Ioc.Plugs.Storage.Enumerations
                                   .CallbackBodyType.Json.Id, "回调地址域名,后不加/", "回调地址相对路径,前需要加/",
                                   "{\"key\":\"$(key)\",\"hash\":\"$(etag)\",\"fsiz\":$(fsize),\"bucket\":\"$(bucket)\",\"name\":\"$(x:name)\",\"mimeType\":\"$(mimeType)\"}");
                return(config);
            });

            serviceProvider =
                EInfrastructure.Core.AutoFac.AspNetCore.AutofacAutoRegister.Use(services, (builder) => { });
            return(serviceProvider);
        }
        /// <summary>
        /// 加载七牛云存储
        /// </summary>
        /// <param name="services"></param>
        /// <param name="configuration"></param>
        public static IServiceCollection AddQiNiuStorage(this IServiceCollection services,
                                                         IConfiguration configuration)
        {
            StartUp.Run();
            var section = configuration.GetSection(nameof(QiNiuStorageConfig));

            if (section == null)
            {
                throw new BusinessException <string>("七牛云存储配置异常", HttpStatus.Err.Name);
            }

            QiNiuStorageConfig qiNiuStorageConfig = new QiNiuStorageConfig(section.GetValue <string>("AccessKey"),
                                                                           section.GetValue <string>("SecretKey"), section.GetValue <ZoneEnum>("DefaultZones"),
                                                                           section.GetValue <string>("DefaultHost"), section.GetValue <string>("DefaultBucket"))
            {
                IsUseHttps          = section.GetValue <bool>("IsUseHttps"),
                UseCdnDomains       = section.GetValue <bool>("UseCdnDomains"),
                IsAllowOverlap      = section.GetValue <bool>("IsAllowOverlap"),
                PersistentNotifyUrl = section.GetValue <string>("PersistentNotifyUrl"),
                PersistentPipeline  = section.GetValue <string>("PersistentPipeline"),
                ChunkUnit           =
                    ChunkUnit
                    .FromValue <ChunkUnit>((section
                                            .GetValue <string>("ChunkUnit").ConvertToInt(ChunkUnit.U2048K.Id)))
            };

            qiNiuStorageConfig.SetCallBack(section.GetValue <string>("CallbackBodyType").ConvertToInt(CallbackBodyType.Json.Id),
                                           section.GetValue <string>("CallbackHost"), section.GetValue <string>("CallbackUrl"),
                                           section.GetValue <string>("CallbackBody"));
            configuration.GetSection(nameof(QiNiuStorageConfig)).Bind(qiNiuStorageConfig);
            qiNiuStorageConfig.SetCallBackState(!string.IsNullOrEmpty(qiNiuStorageConfig.CallbackUrl) &&
                                                !string.IsNullOrEmpty(qiNiuStorageConfig.CallbackHost));

            return(AddQiNiuStorage(services,
                                   () => qiNiuStorageConfig));
        }
Beispiel #17
0
 /// <summary>
 /// 文件实现类
 /// </summary>
 public StorageProvider(ILogService logService, QiNiuStorageConfig qiNiuConfig) : base(logService, qiNiuConfig)
 {
 }
Beispiel #18
0
 /// <summary>
 /// 图片服务
 /// </summary>
 public PictureService(ILogService logService, QiNiuStorageConfig qiNiuConfig) : base(logService, qiNiuConfig)
 {
 }
 public ClaimQiNiuRequirementFilter(ILogService logService, QiNiuStorageConfig qiNiuConfig)
 {
     _qiNiuConfig = qiNiuConfig;
     _logService  = logService;
 }
Beispiel #20
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="qiNiuConfig"></param>
 public ClaimQiNiuRequirementFilter(QiNiuStorageConfig qiNiuConfig)
 {
     _qiNiuConfig = qiNiuConfig;
 }
Beispiel #21
0
 /// <summary>
 /// 图片服务
 /// </summary>
 public PictureProvider(QiNiuStorageConfig qiNiuConfig) : base(
         qiNiuConfig)
 {
 }
 /// <summary>
 ///
 /// </summary>
 public BaseStorageProvider(QiNiuStorageConfig qiNiuConfig)
 {
     _qiNiuConfig = qiNiuConfig;
     ValidationCommon.Check(qiNiuConfig, "七牛云存储配置异常", HttpStatus.Err.Name);
 }
 /// <summary>
 /// 文件实现类
 /// </summary>
 public StorageProvider(ILogger <StorageProvider> logger, QiNiuStorageConfig qiNiuConfig) : base(qiNiuConfig)
 {
     this._logger = logger;
 }
 /// <summary>
 /// 得到Scheme
 /// </summary>
 /// <param name="qiNiuConfig">七牛存储配置</param>
 /// <param name="isUseCdn">是否使用cdn</param>
 /// <returns></returns>
 internal static bool GetCdn(QiNiuStorageConfig qiNiuConfig, bool?isUseCdn)
 {
     return(isUseCdn != null ? isUseCdn.Value : qiNiuConfig.UseCdnDomains);
 }
Beispiel #25
0
 /// <summary>
 /// 文件实现类
 /// </summary>
 public StorageProvider(QiNiuStorageConfig qiNiuConfig = null) : base(qiNiuConfig)
 {
 }
 /// <summary>
 /// 得到Scheme
 /// </summary>
 /// <param name="qiNiuConfig">七牛存储配置</param>
 /// <param name="isUseHttps">是否使用https</param>
 /// <returns></returns>
 internal static string GetScheme(QiNiuStorageConfig qiNiuConfig, bool?isUseHttps)
 {
     return(GetHttpsState(qiNiuConfig, isUseHttps) ? "https://" : "http://");
 }
 /// <summary>
 /// 得到Scheme
 /// </summary>
 /// <param name="qiNiuConfig">七牛存储配置</param>
 /// <param name="isUseHttps">是否使用https</param>
 /// <returns></returns>
 internal static bool GetHttpsState(QiNiuStorageConfig qiNiuConfig, bool?isUseHttps)
 {
     return(isUseHttps != null ? isUseHttps.Value : qiNiuConfig.IsUseHttps);
 }
Beispiel #28
0
 /// <summary>
 ///
 /// </summary>
 public BucketProvider(ILogger <BucketProvider> logger, QiNiuStorageConfig qiNiuConfig,
                       IJsonProvider jsonProvider) : this(logger, qiNiuConfig)
 {
     _jsonProvider = jsonProvider;
 }
Beispiel #29
0
 /// <summary>
 /// 图片服务
 /// </summary>
 public PictureService(QiNiuStorageConfig qiNiuConfig = null) : base(
         qiNiuConfig)
 {
 }
Beispiel #30
0
 /// <summary>
 ///
 /// </summary>
 public BucketProvider(QiNiuStorageConfig qiNiuConfig, IJsonProvider jsonProvider) : this(qiNiuConfig)
 {
     _jsonProvider = jsonProvider;
 }