예제 #1
0
        public BucketInfo[] GetBucketLayoutInfo()
        {
            int count = m_BucketSizes.Count;

            BucketInfo[] buckets = new BucketInfo[count];
            for (int i = 0; i < count; i++)
            {
                int size = m_BucketSizes[i];
                buckets[i].size       = size;
                buckets[i].usedSize   = 0;
                buckets[i].attributes = new VFXAttribute[size];
                buckets[i].channels   = new int[size];
            }

            foreach (var kvp in m_AttributeLayout)
            {
                var attrib = kvp.Key;
                int size   = VFXValue.TypeToSize(attrib.type);
                int offset = kvp.Value.offset;
                for (int i = 0; i < size; i++)
                {
                    buckets[kvp.Value.bucket].attributes[i + offset] = attrib;
                    buckets[kvp.Value.bucket].channels[i + offset]   = i;
                    buckets[kvp.Value.bucket].usedSize = Math.Max(buckets[kvp.Value.bucket].usedSize, i + offset + 1);
                }
            }

            return(buckets);
        }
예제 #2
0
        /// <summary>
        /// 上传文件
        /// </summary>
        /// <param name="stream">文件流</param>
        /// <returns>Oss文件地址</returns>
        private async Task <string> PutObject(Stream stream, string key, string mimeType)
        {
            var bucketInfo     = BucketInfo.CreateByRegion(CommConstant.OssRegion, CommConstant.OssBucket);
            var requestContent = new RequestContent
            {
                ContentType   = RequestContentType.Stream,
                StreamContent = stream,
                MimeType      = mimeType
            };

            var result = await _client.PutObjectAsync(bucketInfo, key, requestContent);

            if (!result.IsSuccess)
            {
                var message = string.Format("ErrorMessage:{0}", result.ErrorMessage);
                if (result.ErrorResult != null)
                {
                    message += string.Format("{0}HostId:{1}{2}RequestId:{3}{4}Code:{5}{6}Message:{7}{8}", Environment.NewLine,
                                             result.ErrorResult.HostId, Environment.NewLine,
                                             result.ErrorResult.RequestId, Environment.NewLine,
                                             result.ErrorResult.Code, Environment.NewLine,
                                             result.ErrorResult.Message, Environment.NewLine
                                             );
                }
                //LogHelper.WriteError(message, result.InnerException);
                return(string.Empty);
            }
            return(key);
        }
예제 #3
0
        /// <summary>
        /// Append对象
        /// </summary>
        /// <param name="bucket"></param>
        /// <param name="key"></param>
        /// <param name="nextAppendPosition"></param>
        /// <param name="file"></param>
        /// <returns></returns>
        public async Task <OssResult <AppentObjectResult> > AppendObject(BucketInfo bucket, string key,
                                                                         long nextAppendPosition, RequestContent file)
        {
            var cmd = new AppendObjectCommand(_requestContext, bucket, key, nextAppendPosition, file);

            return(await cmd.ExecuteAsync());
        }
예제 #4
0
 public PutObjectCommand(RequestContext requestContext, BucketInfo bucketInfo, string key, RequestContent requestContent, IDictionary <string, string> extraHeaders)
     : base(requestContext, bucketInfo, key)
 {
     Bucket         = bucketInfo;
     RequestContent = requestContent;
     ExtraHeaders   = extraHeaders;
 }
 public BaseObjectCommand(RequestContext requestContext,
                          BucketInfo bucket,
                          string key) : base(requestContext)
 {
     Bucket = bucket;
     Key    = key;
 }
        public static string BuildCanonicalizedResource(BucketInfo bucket, string key, IDictionary <string, string> parameters)
        {
            var sb = new StringBuilder();

            sb.Append(bucket.MakeResourcePathForSign(key));

            if (parameters != null)
            {
                var parameterNames = parameters.Keys.Where(k => ParamtersToSign.Contains(k)).ToList();

                if (parameterNames.Count > 0)
                {
                    parameterNames.Sort();


                    var separator = '?';
                    foreach (var paramName in parameterNames)
                    {
                        sb.Append(separator);
                        sb.Append(paramName);
                        var paramValue = parameters[paramName];
                        if (!string.IsNullOrEmpty(paramValue))
                        {
                            sb.Append("=").Append(paramValue);
                        }

                        separator = '&';
                    }
                }
            }

            return(sb.ToString());
        }
예제 #7
0
 /// <summary>
 /// Sets the cache-control header.
 /// </summary>
 /// <param name="bucketInfo">The bucket info dictionary.</param>
 /// <param name="value">The cache control values.</param>
 public static void SetCacheControl(this BucketInfo bucketInfo, CacheControlHeaderValue value)
 {
     if (value != null)
     {
         bucketInfo.Add("Cache-Control", value.ToString());
     }
 }
예제 #8
0
 public GetObjectCommand(
     RequestContext requestContext,
     BucketInfo bucket,
     string key,
     GetObjectParams parameters) : base(requestContext, bucket, key)
 {
     Params = parameters;
 }
예제 #9
0
        /// <summary>
        /// 复制对象
        /// </summary>
        /// <param name="bucket"></param>
        /// <param name="srcKey"></param>
        /// <param name="targetBucket"></param>
        /// <param name="targetKey"></param>
        /// <param name="extraHeaders"></param>
        /// <returns></returns>
        public async Task <OssResult <CopyObjectResult> > CopyObjectAsync(BucketInfo bucket, string srcKey,
                                                                          BucketInfo targetBucket,
                                                                          string targetKey,
                                                                          IDictionary <string, string> extraHeaders = null)
        {
            var cmd = new CopyObjectCommand(_requestContext, targetBucket, targetKey, bucket, srcKey, extraHeaders);

            return(await cmd.ExecuteAsync());
        }
예제 #10
0
 public AppendObjectCommand(RequestContext requestContext,
                            BucketInfo bucket,
                            string key,
                            long position,
                            RequestContent objectInfo) : base(requestContext, bucket, key)
 {
     Position       = position;
     RequestContent = objectInfo;
 }
예제 #11
0
        public override ServiceRequest BuildRequest()
        {
            var req = new ServiceRequest(BucketInfo.CreateByRegion(_region, ""), "", HttpMethod.Get);

            req.AddParameter(RequestParameters.PREFIX, _request.Prefix);
            req.AddParameter(RequestParameters.MARKER, _request.Marker);
            req.AddParameter(RequestParameters.MAX_KEYS, _request.MaxKeys?.ToString());

            return(req);
        }
예제 #12
0
 public DeleteMultipleObjectsCommand(RequestContext requestContext,
                                     BucketInfo bucket,
                                     IList <string> keys,
                                     bool quiet          = false,
                                     string encodingType = "") : base(requestContext)
 {
     Bucket       = bucket;
     Keys         = keys;
     EncodingType = encodingType;
     Quiet        = quiet;
 }
예제 #13
0
        /// <summary>
        /// 将指定的字符串内容上传为文件
        /// </summary>
        /// <param name="bucket"></param>
        /// <param name="key"></param>
        /// <param name="content"></param>
        /// <param name="mimeType"></param>
        /// <returns></returns>
        public async Task <OssResult <PutObjectResult> > PutObjectAsync(BucketInfo bucket, string key, string content, string mimeType = "text/plain")
        {
            var file = new RequestContent()
            {
                ContentType   = RequestContentType.String,
                StringContent = content,
                MimeType      = mimeType
            };

            return(await PutObjectAsync(bucket, key, file));
        }
예제 #14
0
        public void MaximumItems()
        {
            Assert.Throws <InvalidOperationException>(() =>
            {
                var list = new BucketInfo();

                for (int i = 0; i < BucketInfo.MaximumBucketItemsAllowed + 1; i++)
                {
                    list.Add(Guid.NewGuid().ToString(), Guid.NewGuid().ToString());
                }
            });
        }
예제 #15
0
        /// <summary>
        /// 将指定的字符串内容上传为文件
        /// </summary>
        /// <param name="bucket"></param>
        /// <param name="key"></param>
        /// <param name="content"></param>
        /// <param name="mimeType"></param>
        /// <returns></returns>
        public async Task <OssResult <PutObjectResult> > PutObjectAsync(BucketInfo bucket, string key, string content, string mimeType = "text/plain", ObjectMetadata meta = null, IDictionary <string, string> extraHeaders = null)
        {
            var file = new RequestContent()
            {
                ContentType   = RequestContentType.String,
                StringContent = content,
                MimeType      = mimeType,
                Metadata      = meta
            };

            return(await PutObjectAsync(bucket, key, file, extraHeaders));
        }
예제 #16
0
        /// <summary>
        /// 删除对象
        /// </summary>
        /// <param name="bucket"></param>
        /// <param name="key"></param>
        /// <returns></returns>
        public async Task <OssResult <DeleteObjectResult> > DeleteObjectAsync(BucketInfo bucket, string key)
        {
            var cmd = new DeleteObjectCommand(_requestContext, bucket, key);

            var result = await cmd.ExecuteAsync(_client);

            if (!result.IsSuccess)
            {
                _logger.LogError($"Failed in OssClient.{nameof(PutObjectAsync)}(). \nBucket: {bucket.BucketName}\nPath: {key}");
            }

            return(result);
        }
예제 #17
0
        public void addBucket(BucketInfo info)
        {
            if (bucketMap == null)
            {
                bucketMap = new Dictionary <string, BucketInfo>();
            }
            BucketInfo temp;

            if (bucketMap.TryGetValue(info.bucketName, out temp))
            {
                bucketMap.Remove(info.bucketName);
            }
            bucketMap.Add(info.bucketName, info);
        }
예제 #18
0
        /// <summary>
        /// 根据指定的文件名上传文件
        /// </summary>
        /// <param name="bucket"></param>
        /// <param name="key"></param>
        /// <param name="filePathName"></param>
        /// <returns></returns>
        public async Task <OssResult <PutObjectResult> > PutObjectByFileNameAsync(BucketInfo bucket, string key,
                                                                                  string filePathName)
        {
            using (var stream = File.OpenRead(filePathName))
            {
                var file = new RequestContent()
                {
                    ContentType   = RequestContentType.Stream,
                    StreamContent = stream,
                    MimeType      = MimeHelper.GetMime(filePathName)
                };

                return(await PutObjectAsync(bucket, key, file));
            }
        }
예제 #19
0
    public static async Task Main(string[] args)
    {
        if (args.Length < 2)
        {
            Console.WriteLine("Please run with bucket name and file path");
            return;
        }

        var bucketName = args[0];
        var filePath   = args[1];

        var conf = new ConfigurationBuilder()
                   .SetBasePath(Directory.GetCurrentDirectory())
                   .AddJsonFile("appsettings.json", true, true)
                   .AddJsonFile("appsettings.Development.json", true, true)
                   .Build();

        IServiceCollection services = new ServiceCollection();

        services.AddOssClient(conf);
        var sp     = services.BuildServiceProvider();
        var client = sp.GetService <OssClient>();

        var bucket         = BucketInfo.CreateByRegion(OssRegions.HangZhou, bucketName, false, false);
        var remoteFilePaht = $"test/{DateTime.Now.ToString("yyyyMMddHHmmss")}.png";

        using (var fs = new FileStream(filePath, FileMode.Open))
        {
            var file = new RequestContent()
            {
                MimeType      = "images/png",
                ContentType   = RequestContentType.Stream,
                StreamContent = fs,
            };

            var result = await client.PutObjectAsync(bucket, remoteFilePaht, file);

            if (result.IsSuccess)
            {
                Console.WriteLine("Succeeded!");
            }
            else
            {
                Console.WriteLine("Failed!");
                Console.WriteLine(result.ErrorMessage);
            }
        }
    }
예제 #20
0
        /// <summary>
        /// 根据指定的文件名上传文件
        /// </summary>
        /// <param name="bucket"></param>
        /// <param name="key"></param>
        /// <param name="filePathName"></param>
        /// <returns></returns>
        public async Task <OssResult <PutObjectResult> > PutObjectByFileNameAsync(BucketInfo bucket, string key,
                                                                                  string filePathName, ObjectMetadata meta = null, IDictionary <string, string> extraHeaders = null)
        {
            using (var stream = File.OpenRead(filePathName))
            {
                var file = new RequestContent()
                {
                    ContentType   = RequestContentType.Stream,
                    StreamContent = stream,
                    MimeType      = MimeHelper.GetMime(filePathName),
                    Metadata      = meta
                };

                return(await PutObjectAsync(bucket, key, file, extraHeaders));
            }
        }
예제 #21
0
        public void BucketInfoEquatable()
        {
            var bucketinfo1 = new BucketInfo
            {
                { "key1", "value1" },
                { "key2", "value2" }
            };

            var bucketinfo2 = new BucketInfo
            {
                { "key1", "value1" },
                { "key2", "value2" }
            };

            Assert.True(bucketinfo1.Equals(bucketinfo2));
            Assert.Equal(bucketinfo1.GetHashCode(), bucketinfo2.GetHashCode());
        }
예제 #22
0
        public void FileInfoEquatable()
        {
            var fileinfo1 = new BucketInfo
            {
                { "key1", "value1" },
                { "key2", "value2" }
            };

            var fileinfo2 = new BucketInfo
            {
                { "key1", "value1" },
                { "key2", "value2" }
            };

            Assert.True(fileinfo1.Equals(fileinfo2));
            Assert.Equal(fileinfo1.GetHashCode(), fileinfo2.GetHashCode());
        }
예제 #23
0
        /// <summary>
        /// 上传文件
        /// </summary>
        /// <param name="bucket"></param>
        /// <param name="key"></param>
        /// <param name="file"></param>
        /// <returns></returns>
        public async Task <OssResult <PutObjectResult> > PutObjectAsync(BucketInfo bucket, string key, RequestContent file, IDictionary <string, string> extraHeaders = null)
        {
            if (key.StartsWith("/"))
            {
                throw new ArgumentException($"{nameof(key)} can not start with '/'");
            }

            var cmd = new PutObjectCommand(_requestContext, bucket, key, file, extraHeaders);

            var result = await cmd.ExecuteAsync(_client);

            if (!result.IsSuccess)
            {
                _logger.LogError($"Failed in OssClient.{nameof(PutObjectAsync)}(). \nBucket: {bucket.BucketName}\nPath: {key}");
            }

            return(result);
        }
예제 #24
0
        /// <summary>
        /// 获取文件的下载链接
        /// </summary>
        /// <param name="bucket">bucket信息</param>
        /// <param name="storeKey">文件存储key</param>
        /// <param name="expireSeconds">签名超时时间秒数</param>
        /// <param name="imgStyle">阿里云图片处理样式</param>
        /// <returns></returns>
        public string GetFileDownloadLink(BucketInfo bucket, string storeKey, int expireSeconds, string imgStyle = null)
        {
            long seconds = (DateTime.UtcNow.AddSeconds(expireSeconds).Ticks - 621355968000000000) / 10000000;

            string toSign = String.Format("GET\n\n\n{0}\n/{1}/{2}", seconds, bucket.BucketName, storeKey);

            if (!String.IsNullOrEmpty(imgStyle))
            {
                toSign += $"?x-oss-process=style/{imgStyle}";
            }

            string sign = ServiceSignature.Create().ComputeSignature(
                _requestContext.OssCredential.AccessKeySecret, toSign);

            string styleSegment = String.IsNullOrEmpty(imgStyle) ? String.Empty : $"x-oss-process=style/{imgStyle}&";
            string url          = $"{bucket.BucketUri}{storeKey}?{styleSegment}OSSAccessKeyId={_requestContext.OssCredential.AccessKeyId}&Expires={seconds}&Signature={WebUtility.UrlEncode(sign)}";

            return(url);
        }
        public void GetBucketInfoTest()
        {
            var bucketName = OssTestUtils.GetBucketName(_className);

            try
            {
                //assert bucket does not exist
                Assert.IsFalse(OssTestUtils.BucketExists(_ossClient, bucketName),
                               string.Format("Bucket {0} should not exist before creation", bucketName));

                //create a new bucket
                _ossClient.CreateBucket(bucketName, StorageClass.IA);
                OssTestUtils.WaitForCacheExpire();

                BucketInfo bucketInfo = _ossClient.GetBucketInfo(bucketName);
                Assert.AreEqual(bucketInfo.Bucket.AccessControlList.Grant, CannedAccessControlList.Private);

                _ossClient.SetBucketAcl(bucketName, CannedAccessControlList.PublicRead);
                OssTestUtils.WaitForCacheExpire();
                bucketInfo = _ossClient.GetBucketInfo(bucketName);
                Assert.AreEqual(bucketInfo.Bucket.AccessControlList.Grant, CannedAccessControlList.PublicRead);

                _ossClient.SetBucketAcl(bucketName, CannedAccessControlList.PublicReadWrite);
                OssTestUtils.WaitForCacheExpire();
                bucketInfo = _ossClient.GetBucketInfo(bucketName);
                Assert.AreEqual(bucketInfo.Bucket.AccessControlList.Grant, CannedAccessControlList.PublicReadWrite);

                Assert.IsNotNull(bucketInfo.Bucket.Location);
                Assert.IsNotNull(bucketInfo.Bucket.ExtranetEndpoint);
                Assert.IsNotNull(bucketInfo.Bucket.IntranetEndpoint);

                Assert.AreEqual(bucketInfo.Bucket.StorageClass, StorageClass.IA);
                Assert.AreEqual(bucketInfo.Bucket.Name, bucketName);
                Assert.IsTrue(bucketInfo.Bucket.ToString().Contains(bucketName));
            }
            finally
            {
                _ossClient.DeleteBucket(bucketName);
            }
        }
예제 #26
0
    public BVH(Bounds[] bounds, Matrix4x4[] transformPositions, ref List <RayTracingSubscriber> subs)
    {
        /*
         * TODO: 1) Create the primInfo for each mesh 2) create the Tree with pointer and SAH 3) Linearize
         */
        this.subs      = subs;
        primitivesInfo = new List <PrimitiveInfo>(transformPositions.Length);

        for (int i = 0; i < transformPositions.Length; i++)
        {
            PrimitiveInfo info = new PrimitiveInfo()
            {
                bounds         = bounds[i],
                primitiveIndex = i
            };

            primitivesInfo.Add(info);
        }

        for (int i = 0; i < nBuckets; i++)
        {
            buckets[i] = new BucketInfo();
        }

        List <RayTracingSubscriber> orderedInfos = new List <RayTracingSubscriber>(primitivesInfo.Count);

        root = RecursiveBuild(0, primitivesInfo.Count, ref orderedInfos);

        // primitivesInfo = orderedInfos;


        subs.Clear();
        subs.AddRange(orderedInfos);

        flatTree = new LBVH[nodeCreated];
        int offset = 0;

        FlattenTree(root, ref offset);
    }
예제 #27
0
        internal void SetProperties()
        {
            if (_propertiesSet) return;

            // first make sure your set to your input's properties
            foreach (InternalRecordSource source in _inputList) {
                source.SetProperties();
                if (_passThruInputSorting) _sorting = source.Sorting;
                if (_passThruInputBucketting) _bucketting = source.Bucketting;
                if (_passThruInputSegmenting) _segmenting = source.Segmenting;
                if (_passThruInputReduced) _isReduced = source.IsReduced;
            }

            _propertiesSet = true;
        }
예제 #28
0
        /// <summary>
        /// 上传文件
        /// </summary>
        /// <param name="bucket"></param>
        /// <param name="key"></param>
        /// <param name="file"></param>
        /// <returns></returns>
        public async Task <OssResult <PutObjectResult> > PutObjectAsync(BucketInfo bucket, string key, RequestContent file)
        {
            var cmd = new PutObjectCommand(_requestContext, bucket, key, file, null);

            return(await cmd.ExecuteAsync());
        }
예제 #29
0
        /// <summary>
        /// Get Object Meta用来获取某个Bucket下的某个Object的基本meta信息,包括该Object的ETag、Size(文件大小)、LastModified,并不返回其内容。
        /// </summary>
        /// <param name="bucket"></param>
        /// <param name="key"></param>
        /// <returns></returns>
        public async Task <OssResult <GetObjectMetaResult> > GetObjectMetaAsync(BucketInfo bucket, string key)
        {
            var cmd = new GetObjectMetaCommand(_requestContext, bucket, key);

            return(await cmd.ExecuteAsync());
        }
예제 #30
0
        /// <summary>
        /// ead Object只返回某个Object的meta信息,不返回文件内容。
        /// </summary>
        /// <param name="bucket"></param>
        /// <param name="key"></param>
        /// <param name="parameters"></param>
        /// <returns></returns>
        public async Task <OssResult <HeadObjectResult> > HeadObjectAsync(BucketInfo bucket, string key, HeadObjectParams parameters)
        {
            var cmd = new HeadObjectCommand(_requestContext, bucket, key, parameters);

            return(await cmd.ExecuteAsync());
        }
예제 #31
0
        /// <summary>
        /// 删除多个对象
        /// </summary>
        /// <param name="bucket"></param>
        /// <param name="keys"></param>
        /// <param name="quiet"></param>
        /// <returns></returns>
        public async Task <OssResult <DeleteMultipleObjectsResult> > DeleteMultipleObjectsAsync(BucketInfo bucket,
                                                                                                IList <string> keys, bool quiet = false)
        {
            var cmd = new DeleteMultipleObjectsCommand(_requestContext, bucket, keys, quiet);

            return(await cmd.ExecuteAsync());
        }