///  <summary>
        /// 复制到新空间的参数
        ///  </summary>
        ///  <param name="copyFileParam">复制到新空间的参数</param>
        ///  <param name="persistentOps">策略</param>
        ///  <returns></returns>
        private IEnumerable <CopyFileResultDto> CopyToMulti(ICollection <CopyFileRangeParam.CopyFileParam> copyFileParam,
                                                            BasePersistentOps persistentOps)
        {
            List <string> ops = copyFileParam.Select(x =>
                                                     GetBucketManager(persistentOps).CopyOp(Core.Tools.GetBucket(QiNiuConfig, persistentOps.Bucket),
                                                                                            x.SourceKey,
                                                                                            Core.Tools.GetBucket(QiNiuConfig, persistentOps.Bucket, x.OptBucket), x.OptKey, x.IsForce))
                                .ToList();
            BatchResult ret   = GetBucketManager(persistentOps).Batch(ops);
            var         index = 0;

            foreach (BatchInfo info in ret.Result)
            {
                index++;
                if (info.Code == (int)HttpCode.OK)
                {
                    yield return(new CopyFileResultDto(true, copyFileParam.ToList()[index - 1].SourceKey,
                                                       "复制成功"));
                }
                else
                {
                    yield return(new CopyFileResultDto(false, copyFileParam.ToList()[index - 1].SourceKey,
                                                       info.Data.Error));
                }
            }
        }
        /// <summary>
        /// 移动文件(两个文件需要在同一账号下)
        /// </summary>
        /// <param name="moveFileParamList"></param>
        /// <param name="persistentOps">策略</param>
        /// <returns></returns>
        private IEnumerable <MoveFileResultDto> MoveMulti(List <MoveFileRangeParam.MoveFileParam> moveFileParamList,
                                                          BasePersistentOps persistentOps)
        {
            var           bucketManager = GetBucketManager(persistentOps);
            List <string> ops           = moveFileParamList.Select(x =>
                                                                   bucketManager.MoveOp(Core.Tools.GetBucket(QiNiuConfig, persistentOps.Bucket), x.SourceKey,
                                                                                        x.OptBucket, x.OptKey, x.IsForce)).ToList();
            BatchResult ret   = bucketManager.Batch(ops);
            var         index = 0;

            foreach (BatchInfo info in ret.Result)
            {
                index++;
                if (info.Code == (int)HttpCode.OK)
                {
                    yield return(new MoveFileResultDto(true, moveFileParamList.ToList()[index - 1].SourceKey,
                                                       "复制成功"));
                }
                else
                {
                    yield return(new MoveFileResultDto(false, moveFileParamList.ToList()[index - 1].SourceKey,
                                                       info.Data.Error));
                }
            }
        }
        /// <summary>
        /// 获取文件信息集合
        /// </summary>
        /// <param name="keyList">文件key集合</param>
        /// <param name="persistentOps">策略</param>
        /// <returns></returns>
        private IEnumerable <FileInfoDto> GetMulti(string[] keyList, BasePersistentOps persistentOps)
        {
            List <string> ops = keyList.Select(key =>
                                               GetBucketManager(persistentOps)
                                               .StatOp(Core.Tools.GetBucket(QiNiuConfig, persistentOps.Bucket), key)).ToList();
            BatchResult ret = GetBucketManager(persistentOps).Batch(ops);

            var index = 0;

            foreach (var item in ret.Result)
            {
                index++;
                if (item.Code == (int)HttpCode.OK)
                {
                    yield return(new FileInfoDto(true, "success")
                    {
                        Size = item.Data.Fsize,
                        Hash = item.Data.Hash,
                        MimeType = item.Data.MimeType,
                        PutTime = item.Data.PutTime,
                        FileType = Configuration.Ioc.Plugs.Storage.Enumerations.StorageClass
                                   .FromValue <EInfrastructure.Core.Configuration.Ioc.Plugs.Storage.Enumerations.StorageClass>(
                            item.Data.FileType),
                        Key = keyList[index - 1]
                    });
                }
                else
                {
                    yield return(new FileInfoDto(false, item.Data.Error)
                    {
                        Key = keyList[index - 1]
                    });
                }
            }
        }
Exemple #4
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="key">文件key</param>
 /// <param name="permiss">访问权限 公开:0 私有:1 公共读写:2(如果不清楚,可以为null,会自动判断处理,但会影响性能)</param>
 /// <param name="persistentOps"></param>
 public GetVisitUrlParam(string key, Permiss permiss = null, BasePersistentOps persistentOps = null)
 {
     Key           = key;
     Permiss       = permiss;
     PersistentOps = persistentOps ?? new BasePersistentOps();
     Expire        = 3600;
 }
 /// <summary>
 ///
 /// </summary>
 /// <param name="imageSource">镜像源</param>
 /// <param name="referHost">回源时使用的Host头部值,可以为空</param>
 /// <param name="persistentOps">策略(如果需要修改其他空间的镜像源,可以修改此对象的Bucket)</param>
 public SetBucketSource(string imageSource, string referHost = "",
                        BasePersistentOps persistentOps      = null)
 {
     ImageSource   = imageSource;
     ReferHost     = referHost;
     PersistentOps = persistentOps ?? new BasePersistentOps();
 }
Exemple #6
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="key">文件key</param>
 /// <param name="permiss">访问权限 公开:0 私有:1 公共读写:2(如果不清楚,可以为null,会自动判断处理,但会影响性能)</param>
 /// <param name="expire">过期时间,默认3600s</param>
 /// <param name="persistentOps"></param>
 public GetVisitUrlParam(string key, Permiss permiss, int expire = 3600,
                         BasePersistentOps persistentOps         = null) : this(
         key,
         permiss, persistentOps)
 {
     Expire = expire;
 }
        /// <summary>
        /// 批量更改文件Type
        /// </summary>
        /// <param name="keys">文件key</param>
        /// <param name="type">0表示普通存储,1表示低频存储</param>
        /// <param name="persistentOps">策略</param>
        /// <returns></returns>
        private IEnumerable <ChangeTypeResultDto> ChangeTypeMulti(string[] keys, int type,
                                                                  BasePersistentOps persistentOps)
        {
            var           bucketManager = base.GetBucketManager(persistentOps);
            List <string> ops           = new List <string>();

            foreach (string key in keys)
            {
                string op = bucketManager.ChangeTypeOp(Core.Tools.GetBucket(QiNiuConfig, persistentOps.Bucket),
                                                       key, type);
                ops.Add(op);
            }

            BatchResult ret   = bucketManager.Batch(ops);
            var         index = 0;

            foreach (BatchInfo info in ret.Result)
            {
                index++;
                if (info.Code == (int)HttpCode.OK)
                {
                    yield return(new ChangeTypeResultDto(true, keys.ToList()[index - 1], "success"));
                }
                else
                {
                    yield return(new ChangeTypeResultDto(false, keys.ToList()[index - 1], "lose"));
                }
            }
        }
 /// <summary>
 ///
 /// </summary>
 /// <param name="isAllowNullReferer">是否允许空Referer</param>
 /// <param name="refererList">Referer白名单。仅允许指定的域名访问OSS资源</param>
 /// <param name="persistentOps">策略</param>
 public SetRefererParam(bool isAllowNullReferer         = true, List <string> refererList = null,
                        BasePersistentOps persistentOps = null)
 {
     IsAllowNullReferer = isAllowNullReferer;
     RefererList        = refererList ?? new List <string>();
     PersistentOps      = persistentOps ?? new BasePersistentOps();
 }
 /// <summary>
 /// 创建空间
 /// </summary>
 /// <param name="bucketName">待创建的空间名</param>
 /// <param name="zone">存储区域</param>
 /// <param name="storageClass">存储类型</param>
 /// <param name="persistentOps">策略(其中的空间名、区域不作为本次创建空间的条件)</param>
 public CreateBucketParam(string bucketName, int?zone, StorageClass storageClass = null,
                          BasePersistentOps persistentOps = null) : this()
 {
     BucketName    = bucketName;
     Zone          = zone;
     StorageClass  = storageClass;
     PersistentOps = persistentOps ?? new BasePersistentOps();
 }
Exemple #10
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="sourceKey">源文件key</param>
 /// <param name="optKey">目标文件key</param>
 /// <param name="optBucket">目标空间(如果为空,则认为与源空间一致)</param>
 /// <param name="isForce">是否覆盖</param>
 /// <param name="persistentOps">策略(分片为4MB复制时,采用大文件复制)</param>
 public CopyFileParam(string sourceKey, string optKey, string optBucket, bool isForce = true,
                      BasePersistentOps persistentOps = null)
 {
     OptBucket     = optBucket;
     SourceKey     = sourceKey;
     OptKey        = optKey;
     IsForce       = isForce;
     PersistentOps = persistentOps ?? new BasePersistentOps();
 }
Exemple #11
0
 /// <summary>
 /// 移动或重命名文件
 /// </summary>
 /// <param name="sourceKey">源文件key</param>
 /// <param name="optBucket">目标空间</param>
 /// <param name="optKey">目标文件key</param>
 /// <param name="isForce">是否覆盖</param>
 /// <param name="persistentOps">策略</param>
 public MoveFileParam(string sourceKey, string optBucket, string optKey, bool isForce,
                      BasePersistentOps persistentOps = null)
 {
     FileId        = Guid.NewGuid().ToString("N");
     OptBucket     = optBucket;
     SourceKey     = sourceKey;
     OptKey        = optKey;
     IsForce       = isForce;
     PersistentOps = persistentOps ?? new BasePersistentOps();
 }
Exemple #12
0
        /// <summary>
        /// 得到资源管理
        /// </summary>
        /// <param name="persistentOps">策略</param>
        /// <returns></returns>
        protected virtual BucketManager GetBucketManager(BasePersistentOps persistentOps)
        {
            if (_bucketManager == null)
            {
                _bucketManager = new BucketManager(_qiNiuConfig.GetMac(),
                                                   Core.Tools.GetConfig(_qiNiuConfig, persistentOps));
            }

            return(_bucketManager);
        }
Exemple #13
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="prefix">前缀</param>
 /// <param name="delimiter">指定目录分隔符,列出所有公共前缀(模拟列出目录效果)</param>
 /// <param name="isShowHash">是否展示文件Hash(阿里云oss计算hash会极大的影响响应速度,谨慎选择)</param>
 /// <param name="marker">标明本次列举文件的起点</param>
 /// <param name="pageSize">每页数量(默认1000条)</param>
 /// <param name="persistentOps">策略</param>
 public ListFileFilter(string prefix, string delimiter, bool isShowHash = false, string marker = "", int pageSize = 1000,
                       BasePersistentOps persistentOps = null)
 {
     IsShowHash    = isShowHash;
     Prefix        = prefix;
     Delimiter     = delimiter;
     Marker        = marker;
     PageSize      = pageSize;
     PersistentOps = persistentOps ?? new BasePersistentOps();
 }
 /// <summary>
 ///
 /// </summary>
 /// <param name="prefix">前缀</param>
 /// <param name="marker">标明这次GetBucket(ListObjects)的起点</param>
 /// <param name="pageSize">默认查询的空间数量,默认-1,查询全部空间</param>
 /// <param name="tagFilters">标签筛选</param>
 /// <param name="persistentOps">策略</param>
 public GetBucketParam(string prefix = "", string marker = "", int pageSize = -1,
                       List <KeyValuePair <string, string> > tagFilters = null,
                       BasePersistentOps persistentOps = null)
 {
     Prefix        = prefix;
     Marker        = marker;
     PageSize      = pageSize;
     TagFilters    = tagFilters ?? new List <KeyValuePair <string, string> >();
     PersistentOps = persistentOps ?? new BasePersistentOps();
 }
        /// <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="persistentOps"></param>
        /// <returns></returns>
        public BucketPermissItemResultDto GetPermiss(BasePersistentOps persistentOps)
        {
            return(ToolCommon.GetResponse(() =>
            {
                Check.True(persistentOps != null, "策略信息异常");
                var zone = Core.Tools.GetZone(_aLiYunConfig, persistentOps.Zone, () => ZoneEnum.HangZhou);
                var client = _aLiYunConfig.GetClient(zone);
                var bucket = Core.Tools.GetBucket(_aLiYunConfig, persistentOps.Bucket);
                var ret = client.GetBucketAcl(bucket);
                if (ret != null && ret.HttpStatusCode == HttpStatusCode.OK)
                {
                    return new BucketPermissItemResultDto(true, Core.Tools.GetPermiss(ret.ACL), "success");
                }

                if (ret != null)
                {
                    return new BucketPermissItemResultDto(false, null,
                                                          $"lose,RequestId:{ret.RequestId},HttpStatusCode:{ret.HttpStatusCode}");
                }

                return new BucketPermissItemResultDto(false, null, "lose");
            }, message => new BucketPermissItemResultDto(false, null, message)));
        }
        ///  <summary>
        /// 根据文件key集合删除
        ///  </summary>
        ///  <param name="keyList">文件key集合</param>
        ///  <param name="persistentOps">策略</param>
        ///  <returns></returns>
        private IEnumerable <DeleteResultDto> DelMulti(IEnumerable <string> keyList, BasePersistentOps persistentOps)
        {
            var           enumerable = keyList as string[] ?? keyList.ToArray();
            List <string> ops        = enumerable.Select(key =>
                                                         GetBucketManager(persistentOps)
                                                         .DeleteOp(Core.Tools.GetBucket(QiNiuConfig, persistentOps.Bucket), key))
                                       .ToList();
            BatchResult ret   = GetBucketManager(persistentOps).Batch(ops);
            var         index = 0;

            foreach (var item in ret.Result)
            {
                index++;
                if (item.Code == (int)HttpCode.OK)
                {
                    yield return(new DeleteResultDto(true, enumerable.ToList()[index - 1], "删除成功"));
                }
                else
                {
                    yield return(new DeleteResultDto(false, enumerable.ToList()[index - 1], item.Data.Error));
                }
            }
        }
Exemple #18
0
 /// <summary>
 /// 移动或重命名文件
 /// </summary>
 /// <param name="moveFiles"></param>
 /// <param name="persistentOps">策略</param>
 public MoveFileRangeParam(List <MoveFileParam> moveFiles,
                           BasePersistentOps persistentOps = null)
 {
     MoveFiles     = moveFiles ?? new List <MoveFileParam>();
     PersistentOps = persistentOps ?? new BasePersistentOps();
 }
Exemple #19
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="key">文件key</param>
 /// <param name="expire">过期时间,默认7天</param>
 /// <param name="persistentOps">策略</param>
 public SetExpireParam(string key, int expire = 7, BasePersistentOps persistentOps = null)
 {
     Key           = key;
     Expire        = expire;
     PersistentOps = persistentOps ?? new BasePersistentOps();
 }
Exemple #20
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="key">文件key</param>
 /// <param name="permiss">访问权限 公开读:0 私有:1 公共读写:2</param>
 /// <param name="persistentOps">策略(如果修改的空间不是当前配置中的默认域,则修改此对象的Bucket属性)</param>
 public SetPermissParam(string key, Permiss permiss = null, BasePersistentOps persistentOps = null)
 {
     Key           = key;
     Permiss       = permiss;
     PersistentOps = persistentOps ?? new BasePersistentOps();
 }
 /// <summary>
 ///
 /// </summary>
 /// <param name="sourceFileKey">源图,必须是完整的图片路径,有访问权限(必填)</param>
 /// <param name="key">目标图的文件key(必填)</param>
 /// <param name="persistentOps">策略</param>
 public FetchFileParam(string sourceFileKey, string key, BasePersistentOps persistentOps = null)
 {
     SourceFileKey = sourceFileKey;
     Key           = key;
     PersistentOps = persistentOps ?? new BasePersistentOps();
 }
 /// <summary>
 ///
 /// </summary>
 /// <param name="keys">文件key集合</param>
 /// <param name="expire">过期时间,默认7天</param>
 /// <param name="persistentOps">策略</param>
 public SetExpireRangeParam(List <string> keys, int expire = 7, BasePersistentOps persistentOps = null)
 {
     Keys          = keys ?? new List <string>();
     Expire        = expire;
     PersistentOps = persistentOps ?? new BasePersistentOps();
 }
Exemple #23
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="tags">标签</param>
 /// <param name="persistentOps">策略(如果修改的空间不是当前配置中的默认域,则修改此对象的Bucket属性)</param>
 public SetTagBucketParam(List <KeyValuePair <string, string> > tags, BasePersistentOps persistentOps = null)
 {
     Tags          = tags ?? new List <KeyValuePair <string, string> >();
     PersistentOps = persistentOps ?? new BasePersistentOps();
 }
Exemple #24
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="key">文件key</param>
 /// <param name="persistentOps">策略</param>
 public FileDownloadStreamByKeyParam(string key, BasePersistentOps persistentOps)
 {
     Key           = key;
     PersistentOps = persistentOps;
 }
Exemple #25
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="url">地址</param>
 /// <param name="persistentOps">策略</param>
 public GetManageTokenParam(string url, BasePersistentOps persistentOps = null)
 {
     Url           = url;
     PersistentOps = persistentOps ?? new BasePersistentOps();
 }
Exemple #26
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="persistentOps">等待判断的空间是此对象的bucket属性,如果不赋值,则判断默认空间</param>
 public ExistBucketParam(BasePersistentOps persistentOps)
 {
     PersistentOps = persistentOps;
 }
Exemple #27
0
 /// <summary>
 /// 获取空间的访问权限
 /// </summary>
 /// <param name="persistentOps"></param>
 /// <returns></returns>
 public BucketPermissItemResultDto GetPermiss(BasePersistentOps persistentOps)
 {
     throw new NotImplementedException();
 }
 /// <summary>
 ///
 /// </summary>
 /// <param name="key"></param>
 /// <param name="type"></param>
 /// <param name="persistentOps"></param>
 public ChangeTypeParam(string key, Enumerations.StorageClass type, BasePersistentOps persistentOps = null)
 {
     Key           = key;
     Type          = type;
     PersistentOps = persistentOps ?? new BasePersistentOps();
 }
Exemple #29
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="url">地址</param>
 /// <param name="body">内容</param>
 /// <param name="persistentOps">策略</param>
 public GetManageTokenParam(string url, byte[] body, BasePersistentOps persistentOps = null) : this(url,
                                                                                                    persistentOps)
 {
     Body = body;
 }
Exemple #30
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="url">文件访问地址(有权限可以访问的地址,如果你知道key的话,也可通过获取访问地址先获取到文件访问地址)</param>
 /// <param name="persistentOps">策略</param>
 public FileDownloadStreamParam(string url, BasePersistentOps persistentOps = null)
 {
     Url           = url;
     PersistentOps = persistentOps ?? new BasePersistentOps();
 }