/// <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] }); } } }
/// <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(); }
/// <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(); }
/// <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(); }
/// <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(); }
/// <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); }
/// <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)); } } }
/// <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(); }
/// <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(); }
/// <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(); }
/// <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(); }
/// <summary> /// /// </summary> /// <param name="key">文件key</param> /// <param name="persistentOps">策略</param> public FileDownloadStreamByKeyParam(string key, BasePersistentOps persistentOps) { Key = key; PersistentOps = persistentOps; }
/// <summary> /// /// </summary> /// <param name="url">地址</param> /// <param name="persistentOps">策略</param> public GetManageTokenParam(string url, BasePersistentOps persistentOps = null) { Url = url; PersistentOps = persistentOps ?? new BasePersistentOps(); }
/// <summary> /// /// </summary> /// <param name="persistentOps">等待判断的空间是此对象的bucket属性,如果不赋值,则判断默认空间</param> public ExistBucketParam(BasePersistentOps persistentOps) { PersistentOps = persistentOps; }
/// <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(); }
/// <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; }
/// <summary> /// /// </summary> /// <param name="url">文件访问地址(有权限可以访问的地址,如果你知道key的话,也可通过获取访问地址先获取到文件访问地址)</param> /// <param name="persistentOps">策略</param> public FileDownloadStreamParam(string url, BasePersistentOps persistentOps = null) { Url = url; PersistentOps = persistentOps ?? new BasePersistentOps(); }