static void CompleteMultipartUpload()
        {
            try
            {
                List <PartETag> partEtags = new List <PartETag>();
                PartETag        partEtag1 = new PartETag();
                partEtag1.PartNumber = 1;
                partEtag1.ETag       = etag;
                partEtags.Add(partEtag1);

                CompleteMultipartUploadRequest request = new CompleteMultipartUploadRequest()
                {
                    BucketName = bucketName,
                    ObjectKey  = objectName,
                    UploadId   = uploadId,
                    PartETags  = partEtags
                };
                CompleteMultipartUploadResponse response = client.CompleteMultipartUpload(request);

                Console.WriteLine("Complete multipart upload response: {0}", response.StatusCode);
            }
            catch (ObsException ex)
            {
                Console.WriteLine("Exception errorcode: {0}, when complete multipart upload.", ex.ErrorCode);
                Console.WriteLine("Exception errormessage: {0}", ex.ErrorMessage);
            }
        }
Ejemplo n.º 2
0
        internal CompleteMultipartUploadResponse CompleteMultipartUpload(CompleteMultipartUploadRequest request)
        {
            var marshaller   = new CompleteMultipartUploadRequestMarshaller();
            var unmarshaller = CompleteMultipartUploadResponseUnmarshaller.Instance;

            return(Invoke <CompleteMultipartUploadRequest, CompleteMultipartUploadResponse>(request, marshaller, unmarshaller));
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 上传资源
        /// </summary>
        /// <param name="fileName">文件名称</param>
        /// <param name="mimeType">文件类型</param>
        /// <param name="stream"></param>
        public void Upload(string fileName, string mimeType, Stream stream)
        {
            //根据资源大小计算Multipart 2MB为一个Part
            int num = (int)(stream.Length / 0x200000L);

            if (num > 0 && (stream.Length % 0x200000L) != 0)
            {
                num += 1;
            }

            ObjectMetadata metadata = new ObjectMetadata()
            {
                ContentType = mimeType
            };

            try
            {
                if (num > 1)
                {
                    InitiateMultipartUploadRequest initiateMultipartUploadRequest =
                        new InitiateMultipartUploadRequest(_bucketName, fileName)
                    {
                        ObjectMetadata = metadata
                    };
                    InitiateMultipartUploadResult result =
                        _ossClient.InitiateMultipartUpload(initiateMultipartUploadRequest);
                    Console.WriteLine("UploadId:" + result.UploadId);
                    List <PartETag> collection = new List <PartETag>();

                    for (int i = 0; i < num; i++)
                    {
                        int begin = 0x200000 * i;
                        stream.Seek((long)begin, SeekOrigin.Begin);
                        long end = 0x200000 < (stream.Length - begin) ? 0x200000L : stream.Length - begin;

                        UploadPartRequest uploadPartRequest = new UploadPartRequest(_bucketName, fileName,
                                                                                    result.UploadId)
                        {
                            InputStream = stream,
                            PartSize    = end,
                            PartNumber  = i + 1
                        };
                        var partResult = _ossClient.UploadPart(uploadPartRequest);
                        collection.Add(partResult.PartETag);
                    }
                    var completeMultipartUploadRequest = new CompleteMultipartUploadRequest(_bucketName, fileName,
                                                                                            result.UploadId);
                    ((List <PartETag>)completeMultipartUploadRequest.PartETags).AddRange(collection);
                    _ossClient.CompleteMultipartUpload(completeMultipartUploadRequest);
                }
                else
                {
                    _ossClient.PutObject(_bucketName, fileName, stream, metadata);
                }
            }
            catch (WebException exception)
            {
                throw new Exception("上传失败,请重试", exception);
            }
        }
 private CompleteMultipartUploadCommand(IServiceClient client, Uri endpoint, ExecutionContext context,
                                        IDeserializer <ServiceResponse, CompleteMultipartUploadResult> deserializeMethod,
                                        CompleteMultipartUploadRequest completeMultipartUploadRequest)
     : base(client, endpoint, context, deserializeMethod)
 {
     _completeMultipartUploadRequest = completeMultipartUploadRequest;
 }
Ejemplo n.º 5
0
        /// <summary>
        /// 拷贝大文件
        /// </summary>
        /// <param name="client"></param>
        /// <param name="sourceBucket">源空间</param>
        /// <param name="sourceKey">源文件</param>
        /// <param name="optBucket">目标空间</param>
        /// <param name="optKey">目标文件</param>
        /// <returns></returns>
        private CopyFileResultDto CopyBigFile(OssClient client, string sourceBucket, string sourceKey,
                                              string optBucket, string optKey)
        {
            var initiateMultipartUploadRequest = new InitiateMultipartUploadRequest(optBucket, optKey);
            var result = client.InitiateMultipartUpload(initiateMultipartUploadRequest);

            var partSize  = Core.Tools.GetPartSize(ChunkUnit.U4096K);
            var metadata  = client.GetObjectMetadata(sourceBucket, sourceKey);
            var fileSize  = metadata.ContentLength;
            var partCount = (int)fileSize / partSize;

            if (fileSize % partSize != 0)
            {
                partCount++;
            }

            // 开始分片拷贝。
            var partETags = new List <PartETag>();

            for (var i = 0; i < partCount; i++)
            {
                var skipBytes = (long)partSize * i;
                var size      = (partSize < fileSize - skipBytes) ? partSize : (fileSize - skipBytes);
                // 创建UploadPartCopyRequest。可以通过UploadPartCopyRequest指定限定条件。
                var uploadPartCopyRequest =
                    new UploadPartCopyRequest(optBucket, optKey, sourceBucket, sourceKey,
                                              result.UploadId)
                {
                    PartSize   = size,
                    PartNumber = i + 1,
                    // BeginIndex用来定位此次上传分片开始所对应的位置。
                    BeginIndex = skipBytes
                };
                // 调用uploadPartCopy方法来拷贝每一个分片。
                var uploadPartCopyResult = client.UploadPartCopy(uploadPartCopyRequest);
                Console.WriteLine("UploadPartCopy : {0}", i);
                partETags.Add(uploadPartCopyResult.PartETag);
            }

            // 完成分片拷贝。
            var completeMultipartUploadRequest =
                new CompleteMultipartUploadRequest(optBucket, optKey, result.UploadId);

            // partETags为分片上传中保存的partETag的列表,OSS收到用户提交的此列表后,会逐一验证每个数据分片的有效性。全部验证通过后,OSS会将这些分片合成一个完整的文件。
            foreach (var partETag in partETags)
            {
                completeMultipartUploadRequest.PartETags.Add(partETag);
            }

            var ret = client.CompleteMultipartUpload(completeMultipartUploadRequest);

            if (ret.HttpStatusCode == HttpStatusCode.OK)
            {
                return(new CopyFileResultDto(true, sourceKey, "success"));
            }

            return(new CopyFileResultDto(false, sourceKey,
                                         $"RequestId:{ret.RequestId},HttpStatusCode:{ret.HttpStatusCode}"));
        }
Ejemplo n.º 6
0
            public void TestOrdinary()
            {
                ObjectMetadata objectMetadata = new ObjectMetadata();

                objectMetadata.ContentType = "text/plain";
                InitiateMultipartUploadRequest initRequest = new InitiateMultipartUploadRequest()
                {
                    BucketName     = this.bucketName,
                    Key            = "test",
                    ObjectMetadata = objectMetadata
                };

                string          uploadId  = this.client.InitiateMultipartUpload(initRequest).UploadId;
                List <PartETag> partETags = new List <PartETag>();

                for (int i = 0; i < 1; ++i)
                {
                    string eTag = this.client.UploadPart(new UploadPartRequest()
                    {
                        BucketName  = this.bucketName,
                        Key         = "test",
                        UploadId    = uploadId,
                        PartNumber  = i + 1,
                        PartSize    = 1,
                        InputStream = new MemoryStream(Encoding.Default.GetBytes(i.ToString()))
                    }).ETag;
                    partETags.Add(new PartETag()
                    {
                        PartNumber = i + 1, ETag = eTag
                    });
                }
                objectMetadata = new ObjectMetadata();
                Dictionary <string, string> userMetadata = new Dictionary <string, string>();

                userMetadata["metakey"]     = "metaValue";
                objectMetadata.UserMetadata = userMetadata;
                objectMetadata.ContentType  = "text/json";
                CompleteMultipartUploadRequest request =
                    new CompleteMultipartUploadRequest()
                {
                    BucketName     = this.bucketName,
                    Key            = "test",
                    UploadId       = uploadId,
                    PartETags      = partETags,
                    ObjectMetadata = objectMetadata
                };
                CompleteMultipartUploadResponse response = this.client.CompleteMultipartUpload(request);

                Assert.AreEqual(response.BucketName, this.bucketName);
                Assert.AreEqual(response.Key, "test");
                Assert.IsNotNull(response.ETag);
                Assert.IsNotNull(response.Location);
                ObjectMetadata metadata = this.client.GetObjectMetadata(bucketName, "test");

                Assert.AreEqual(metadata.ContentType, "text/plain");
                string resultUserMeta = metadata.UserMetadata["metakey"];

                Assert.AreEqual(resultUserMeta, "metaValue");
            }
Ejemplo n.º 7
0
        /// <summary>
        /// Initiates the asynchronous execution of the CompleteMultipartUpload operation.
        /// <seealso cref="Amazon.Glacier.IAmazonGlacier"/>
        /// </summary>
        ///
        /// <param name="request">Container for the necessary parameters to execute the CompleteMultipartUpload operation.</param>
        /// <param name="cancellationToken">
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// </param>
        /// <returns>The task object representing the asynchronous operation.</returns>
        public Task <CompleteMultipartUploadResponse> CompleteMultipartUploadAsync(CompleteMultipartUploadRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var marshaller   = new CompleteMultipartUploadRequestMarshaller();
            var unmarshaller = CompleteMultipartUploadResponseUnmarshaller.Instance;

            return(InvokeAsync <CompleteMultipartUploadRequest, CompleteMultipartUploadResponse>(request, marshaller,
                                                                                                 unmarshaller, cancellationToken));
        }
Ejemplo n.º 8
0
        public Task <CompleteMultipartUploadResponse> CompleteMultipartUploadAsync(string bucketName, string resource, string uploadId, IEnumerable <UploadPartResponse> parts, Action <CompleteMultipartUploadRequest> config = null, CancellationToken token = default)
        {
            CompleteMultipartUploadRequest req = new CompleteMultipartUploadRequest(bucketName, resource, uploadId, parts);

            config?.Invoke(req);

            return(_operations.CompleteMultipartUploadAsync(req, token));
        }
        public async Task <(bool Success, string FileName, string ErrorMsg)> Process(IQueryCollection query, IFormCollection form, IHeaderDictionary headers, HttpRequest request)
        {
            if (!headers.TryGetValue(ConstConfigs.FileMd5HeaderKey, out var md5) || string.IsNullOrWhiteSpace(md5))
            {
                return(false, "", "The md5 value of the file cannot be empty.");
            }

            if (md5.ToString().Length != 32)
            {
                return(false, "", "不合法的MD5值.");
            }

            if (!headers.TryGetValue(ConstConfigs.ChunksHeaderKey, out var chunksValue) || string.IsNullOrWhiteSpace(chunksValue))
            {
                return(false, "", "The chunks value of the file cannot be empty.");
            }


            if (!MemoryCache.TryGetValue(md5, out PartUploadRecording upload))
            {
                return(false, "", "请先上传分片再合并");
            }
            try
            {
                var req = new CompleteMultipartUploadRequest(Configure.BucketName, upload.Key,
                                                             upload.UploadId);
                foreach (var etag in upload.PartETag)
                {
                    req.PartETags.Add(etag);
                }
                var resp = Client.CompleteMultipartUpload(req);
                if (resp.HttpStatusCode != System.Net.HttpStatusCode.OK)
                {
                    return(false, "", resp.HttpStatusCode.ToString());
                }

                //await Task.CompletedTask;
                var fileName = "/" + upload.Key;
                try
                {
                    var callback = request.HttpContext.RequestServices.GetService <IUploadCompletedCallbackHandler>();
                    if (callback != null)
                    {
                        await callback.OnCompletedAsync(fileName, upload.LocalFileName, request);
                    }
                }
                finally
                {
                    MemoryCache.Remove(md5);
                }

                return(true, fileName, "");
            }
            catch (Exception e)
            {
                return(false, "", e.Message);
            }
        }
Ejemplo n.º 10
0
        public void PartCopyObject(COSXML.CosXml cosXml, string bucket, string key,
                                   COSXML.Model.Tag.CopySourceStruct copySource)
        {
            try
            {
                InitMultipartUploadRequest initMultipartUploadRequest = new InitMultipartUploadRequest(bucket, key);
                //设置签名有效时长
                initMultipartUploadRequest.SetSign(TimeUtils.GetCurrentTime(TimeUnit.SECONDS), 600);

                //执行请求
                InitMultipartUploadResult initMultipartUploadResult = cosXml.InitMultipartUpload(initMultipartUploadRequest);

                Console.WriteLine(initMultipartUploadResult.GetResultInfo());

                string uploadId = initMultipartUploadResult.initMultipartUpload.uploadId;

                int partNumber = 1;

                UploadPartCopyRequest uploadPartCopyRequest = new UploadPartCopyRequest(bucket, key, partNumber, uploadId);
                //设置签名有效时长
                uploadPartCopyRequest.SetSign(TimeUtils.GetCurrentTime(TimeUnit.SECONDS), 600);

                //设置拷贝源
                uploadPartCopyRequest.SetCopySource(copySource);

                //设置拷贝范围
                uploadPartCopyRequest.SetCopyRange(0, 10);

                //执行请求
                UploadPartCopyResult uploadPartCopyResult = cosXml.PartCopy(uploadPartCopyRequest);

                Console.WriteLine(uploadPartCopyResult.GetResultInfo());

                string eTag = uploadPartCopyResult.copyObject.eTag;

                CompleteMultipartUploadRequest completeMultiUploadRequest = new CompleteMultipartUploadRequest(bucket, key, uploadId);
                //设置签名有效时长
                completeMultiUploadRequest.SetSign(TimeUtils.GetCurrentTime(TimeUnit.SECONDS), 600);

                //设置已上传的parts
                completeMultiUploadRequest.SetPartNumberAndETag(partNumber, eTag);

                //执行请求
                CompleteMultipartUploadResult completeMultiUploadResult = cosXml.CompleteMultiUpload(completeMultiUploadRequest);

                Console.WriteLine(completeMultiUploadResult.GetResultInfo());
            }
            catch (COSXML.CosException.CosClientException clientEx)
            {
                Console.WriteLine("CosClientException: " + clientEx.Message);
                Assert.True(false);
            }
            catch (COSXML.CosException.CosServerException serverEx)
            {
                Console.WriteLine("CosServerException: " + serverEx.GetInfo());
                Assert.True(false);
            }
        }
Ejemplo n.º 11
0
        public void PartCopyObject()
        {
            string           key        = commonKey;
            CopySourceStruct copySource = new CopySourceStruct(QCloudServer.Instance().appid,
                                                               bucket, QCloudServer.Instance().region, copykey);

            try
            {
                InitMultipartUploadRequest initMultipartUploadRequest = new InitMultipartUploadRequest(bucket, key);

                //执行请求
                InitMultipartUploadResult initMultipartUploadResult = cosXml.InitMultipartUpload(initMultipartUploadRequest);

                Console.WriteLine(initMultipartUploadResult.GetResultInfo());

                string uploadId = initMultipartUploadResult.initMultipartUpload.uploadId;

                int partNumber = 1;

                UploadPartCopyRequest uploadPartCopyRequest = new UploadPartCopyRequest(bucket, key, partNumber, uploadId);

                //设置拷贝源
                uploadPartCopyRequest.SetCopySource(copySource);

                //设置拷贝范围
                uploadPartCopyRequest.SetCopyRange(0, 10);

                //执行请求
                UploadPartCopyResult uploadPartCopyResult = cosXml.PartCopy(uploadPartCopyRequest);

                Console.WriteLine(uploadPartCopyResult.GetResultInfo());

                string eTag = uploadPartCopyResult.copyObject.eTag;

                CompleteMultipartUploadRequest completeMultiUploadRequest = new CompleteMultipartUploadRequest(bucket, key, uploadId);

                //设置已上传的parts
                completeMultiUploadRequest.SetPartNumberAndETag(partNumber, eTag);

                //执行请求
                CompleteMultipartUploadResult completeMultiUploadResult = cosXml.CompleteMultiUpload(completeMultiUploadRequest);

                Console.WriteLine(completeMultiUploadResult.GetResultInfo());
            }
            catch (COSXML.CosException.CosClientException clientEx)
            {
                Console.WriteLine("CosClientException: " + clientEx.Message);
                Assert.True(false);
            }
            catch (COSXML.CosException.CosServerException serverEx)
            {
                Console.WriteLine("CosServerException: " + serverEx.GetInfo());
                Assert.True(false);
            }
        }
Ejemplo n.º 12
0
 /// <summary>
 /// 分割アップロードの完了処理
 /// </summary>
 /// <param name="key">Bucket中のオブジェクトを特定するためのキー</param>
 /// <param name="uploadId">一連のアップロードを識別するためのキー</param>
 /// <param name="partETags">個別のアップロードを特定するためのシークエンス</param>
 public async Task CompleteMultiPartUploadAsync(string key, string uploadId, IEnumerable <PartETag> partETags)
 {
     var compRequest = new CompleteMultipartUploadRequest
     {
         BucketName = bucket,
         Key        = key,
         UploadId   = uploadId,
         PartETags  = partETags.ToList(),
     };
     var compResponse = await client.CompleteMultipartUploadAsync(compRequest);
 }
Ejemplo n.º 13
0
        /// <summary>
        /// 完成分片上传
        /// </summary>
        /// <param name="bucketName">OSS存储空间名称</param>
        /// <param name="objectName">OSS存储空间上的文件名称</param>
        /// <param name="uploadId">上传编号</param>
        /// <param name="partETags">分片集合</param>
        /// <returns></returns>
        public static CompleteMultipartUploadResult CompleteUploadPart(String bucketName, String objectName, String uploadId, List <PartETag> partETags)
        {
            var completeMultipartUploadRequest =
                new CompleteMultipartUploadRequest(bucketName, objectName, uploadId);

            foreach (var partETag in partETags)
            {
                completeMultipartUploadRequest.PartETags.Add(partETag);
            }

            return(client.CompleteMultipartUpload(completeMultipartUploadRequest));
        }
Ejemplo n.º 14
0
        /// <inheritdoc/>
        public async Task CompleteMultiPartUploadAsync(CompleteMultipartRequest request)
        {
            var completeMultipartUploadRequest = new CompleteMultipartUploadRequest
            {
                BucketName = _environment.GetEnvironmentVariable("BUCKET_NAME"),
                Key        = ConstructFileKey(request.FileName, request.FolderName),
                UploadId   = request.UploadId,
                PartETags  = request.PartETags,
            };

            await _s3.CompleteMultipartUploadAsync(completeMultipartUploadRequest);
        }
Ejemplo n.º 15
0
        /// <summary>
        /// 分片断点续传完成后传入
        /// </summary>
        /// <param name="setting"></param>
        /// <param name="objectName"></param>
        /// <param name="uploadId">如果是第二个分片则必须传入</param>
        /// <param name="partETags"> </param>
        /// <returns></returns>
        public static void UploadFinish(this OSSSetting setting, string objectName, string uploadId, List <PartETag> partETags)
        {
            OssClient client = new(setting.endpoint, setting.accessKeyId, setting.accessKeySecret);

            var completeMultipartUploadRequest = new CompleteMultipartUploadRequest(setting.bucketName, objectName, uploadId);

            foreach (var partETag in partETags.OrderBy(o => o.PartNumber))
            {
                completeMultipartUploadRequest.PartETags.Add(partETag);
            }
            client.CompleteMultipartUpload(completeMultipartUploadRequest);
        }
Ejemplo n.º 16
0
        /// <summary>
        /// Completes multiple part upload process.
        /// Sends final request to Amazon S3 to merge all parts already sent to storage.
        /// </summary>
        /// <param name="key">Unique identifier for an object within a bucket.</param>
        /// <param name="bucket">Existing Amazon S3 bucket.</param>
        /// <param name="uploadId">Unique identifier for one multipart upload. Can be obtained by <see cref="M:CMS.AmazonStorage.S3MultiPartUploader.InitMultiPartUpload(System.String,System.String)" /> method.</param>
        /// <param name="uploadedPartResponses">List of responses from Amazon S3 received after uploading each part.</param>
        /// <returns>Response from Amazon S3 storage after finishing the multipart upload.</returns>
        public CompleteMultipartUploadResponse CompleteMultiPartUploadProcess(string key, string bucket, string uploadId, IEnumerable <UploadPartResponse> uploadedPartResponses)
        {
            var request = new CompleteMultipartUploadRequest
            {
                Key        = key,
                BucketName = bucket,
                UploadId   = uploadId
            };

            request.AddPartETags(uploadedPartResponses);
            return(this.mS3Client.CompleteMultipartUpload(request));
        }
Ejemplo n.º 17
0
        /// <summary>
        /// Sample code to contrast uploading a file using Amazon S3's Multi-Part Upload API
        /// </summary>
        /// <param name="s3Client"></param>
        /// <param name="bucketName"></param>
        /// <param name="fileName"></param>
        static void UploadUsingMultiPartAPI(IAmazonS3 s3Client, string bucketName, string fileName)
        {
            const string objectKey = "multipart/myobject";

            // tell S3 we're going to upload an object in multiple parts and receive an upload ID
            // in return
            var initializeUploadRequest = new InitiateMultipartUploadRequest
            {
                BucketName = bucketName,
                Key        = objectKey
            };
            var initializeUploadResponse = s3Client.InitiateMultipartUpload(initializeUploadRequest);

            // this ID must accompany all parts and the final 'completed' call
            var uploadID = initializeUploadResponse.UploadId;

            // Send the file (synchronously) using 4*5MB parts - note we pass the upload id
            // with each call. For each part we need to log the returned etag value to pass
            // to the completion call
            var partETags = new List <PartETag>();
            var partSize  = 5 * ONE_MEG; // this is the minimum part size allowed

            for (var partNumber = 0; partNumber < 4; partNumber++)
            {
                // part numbers must be between 1 and 1000
                var logicalPartNumber = partNumber + 1;
                var uploadPartRequest = new UploadPartRequest
                {
                    BucketName   = bucketName,
                    Key          = objectKey,
                    UploadId     = uploadID,
                    PartNumber   = logicalPartNumber,
                    PartSize     = partSize,
                    FilePosition = partNumber * partSize,
                    FilePath     = fileName
                };

                var partUploadResponse = s3Client.UploadPart(uploadPartRequest);
                partETags.Add(new PartETag {
                    PartNumber = logicalPartNumber, ETag = partUploadResponse.ETag
                });
            }

            var completeUploadRequest = new CompleteMultipartUploadRequest
            {
                BucketName = bucketName,
                Key        = objectKey,
                UploadId   = uploadID,
                PartETags  = partETags
            };

            s3Client.CompleteMultipartUpload(completeUploadRequest);
        }
Ejemplo n.º 18
0
        internal void CompleteMultipartUpload()
        {
            CompleteMultipartUploadRequest completeRequest = new CompleteMultipartUploadRequest
            {
                BucketName = this.bucketName,
                Key        = this.fileName,
                UploadId   = this.initResponse.UploadId,
            };

            completeRequest.AddPartETags(this.uploadResponses);

            this.client.CompleteMultipartUpload(completeRequest);
        }
Ejemplo n.º 19
0
        private CompleteMultipartUploadRequest ConstructCompleteMultipartUploadRequest(InitiateMultipartUploadResponse initResponse)
        {
            var compRequest = new CompleteMultipartUploadRequest()
            {
                BucketName = this._fileTransporterRequest.BucketName,
                Key        = this._fileTransporterRequest.Key,
                UploadId   = initResponse.UploadId
            };

            compRequest.AddPartETags(this._uploadResponses);
            compRequest.BeforeRequestEvent += this.RequestEventHandler;
            return(compRequest);
        }
Ejemplo n.º 20
0
        private CompleteMultipartUploadRequest ConstructCompleteMultipartUploadRequest(InitiateMultipartUploadResponse initResponse)
        {
            var compRequest = new CompleteMultipartUploadRequest()
            {
                BucketName = this._fileTransporterRequest.BucketName,
                Key        = this._fileTransporterRequest.Key,
                UploadId   = initResponse.UploadId
            };

            compRequest.AddPartETags(this._uploadResponses);
            ((Amazon.Runtime.Internal.IAmazonWebServiceRequest)compRequest).AddBeforeRequestHandler(this.RequestEventHandler);
            return(compRequest);
        }
Ejemplo n.º 21
0
        public static void MultiPartUpload(IOss ossClient, string bucketName,
                                           string objectKeyName, string originalFile, int numberOfParts, int totalSize)
        {
            var initRequest = new InitiateMultipartUploadRequest(bucketName, objectKeyName);
            var initResult  = ossClient.InitiateMultipartUpload(initRequest);

            var partSize = totalSize % numberOfParts == 0 ? totalSize / numberOfParts : totalSize / numberOfParts + 1;

            LogUtility.LogMessage("Each part size is {0} KB", partSize);
            //change to Byte
            partSize *= 1024;

            var partFile = new FileInfo(originalFile);

            // 新建一个List保存每个分块上传后的ETag和PartNumber
            var partETags = new List <PartETag>();

            //upload the file
            using (var fs = new FileStream(partFile.FullName, FileMode.Open))
            {
                for (var i = 0; i < numberOfParts; i++)
                {
                    // 跳到每个分块的开头
                    long skipBytes = partSize * i;
                    fs.Position = skipBytes;

                    // 计算每个分块的大小
                    long size = partSize < partFile.Length - skipBytes
                        ? partSize
                        : partFile.Length - skipBytes;

                    // 创建UploadPartRequest,上传分块
                    var uploadPartRequest = new UploadPartRequest(bucketName, objectKeyName, initResult.UploadId);
                    uploadPartRequest.InputStream = fs;
                    uploadPartRequest.PartSize    = size;
                    uploadPartRequest.PartNumber  = (i + 1);
                    var uploadPartResult = ossClient.UploadPart(uploadPartRequest);

                    // 将返回的PartETag保存到List中。
                    partETags.Add(uploadPartResult.PartETag);
                }
            }

            var completeRequest = new CompleteMultipartUploadRequest(bucketName, objectKeyName, initResult.UploadId);

            foreach (var partETag in partETags)
            {
                completeRequest.PartETags.Add(partETag);
            }
            ossClient.CompleteMultipartUpload(completeRequest);
        }
        public static void MultiPartUpload(IOss ossClient, string bucketName,
                                           string objectKeyName, string originalFile, int numberOfParts, int totalSize)
        {
            var initRequest = new InitiateMultipartUploadRequest(bucketName, objectKeyName);
            var initResult  = ossClient.InitiateMultipartUpload(initRequest);

            var partSize = totalSize % numberOfParts == 0 ? totalSize / numberOfParts : totalSize / numberOfParts + 1;

            LogUtility.LogMessage("Each part size is {0} KB", partSize);
            //change to Byte
            partSize *= 1024;

            var partFile = new FileInfo(originalFile);

            // Create a list to save the result
            var partETags = new List <PartETag>();

            //upload the file
            using (Stream fs = new FileStream(partFile.FullName, FileMode.Open))
            {
                for (var i = 0; i < numberOfParts; i++)
                {
                    // Skip to the start position
                    long skipBytes = partSize * i;
                    fs.Position = skipBytes;

                    // Calculate the part size
                    long size = partSize < partFile.Length - skipBytes
                        ? partSize
                        : partFile.Length - skipBytes;

                    // Create a UploadPartRequest, uploading the part
                    var uploadPartRequest = new UploadPartRequest(bucketName, objectKeyName, initResult.UploadId);
                    uploadPartRequest.InputStream = fs;
                    uploadPartRequest.PartSize    = size;
                    uploadPartRequest.PartNumber  = (i + 1);
                    var uploadPartResult = ossClient.UploadPart(uploadPartRequest);

                    // Save the result
                    partETags.Add(uploadPartResult.PartETag);
                }
            }

            var completeRequest = new CompleteMultipartUploadRequest(bucketName, objectKeyName, initResult.UploadId);

            foreach (var partETag in partETags)
            {
                completeRequest.PartETags.Add(partETag);
            }
            ossClient.CompleteMultipartUpload(completeRequest);
        }
        /// <inheritdoc/>
        protected override void CompleteMultipartUpload(CompleteMultipartUploadRequest completeMultiPartUploadRequest)
        {
            UploadPartEncryptionContext context = EncryptionClient.CurrentMultiPartUploadKeys[completeMultiPartUploadRequest.UploadId];

            if (context.StorageMode == CryptoStorageMode.InstructionFile)
            {
                var instructions           = EncryptionUtils.BuildEncryptionInstructionsForInstructionFileV2(context, EncryptionMaterials);
                var instructionFileRequest = EncryptionUtils.CreateInstructionFileRequestV2(completeMultiPartUploadRequest, instructions);
                EncryptionClient.S3ClientForInstructionFile.PutObject(instructionFileRequest);
            }

            //Clear Context data since encryption is completed
            EncryptionClient.CurrentMultiPartUploadKeys.TryRemove(completeMultiPartUploadRequest.UploadId, out _);
        }
 /// <summary>
 /// Start the asynchronous request for combining parts.
 /// </summary>
 /// <param name="request">Parameters in a request for combining parts</param>
 /// <param name="callback">Asynchronous request callback function</param>
 /// <param name="state">Asynchronous request status object</param>
 /// <returns>Response to the asynchronous request</returns>
 public IAsyncResult BeginCompleteMultipartUpload(CompleteMultipartUploadRequest request, AsyncCallback callback, object state)
 {
     return(this.BeginDoRequest <CompleteMultipartUploadRequest>(request, delegate()
     {
         if (request.ObjectKey == null)
         {
             throw new ObsException(Constants.InvalidObjectKeyMessage, ErrorType.Sender, Constants.InvalidObjectKey, "");
         }
         if (string.IsNullOrEmpty(request.UploadId))
         {
             throw new ObsException(Constants.InvalidUploadIdMessage, ErrorType.Sender, Constants.InvalidUploadId, "");
         }
     }, callback, state));
 }
        /// <summary>
        /// 分片上传
        /// </summary>
        /// <param name="localPath"></param>
        /// <param name="path"></param>
        /// <param name="fileSize"></param>
        /// <returns></returns>
        private bool uploadMulti(string localPath, string path, long fileSize)
        {
            string endPoint = "http://" + m_endPoint;
            var    client   = new OssClient(endPoint, m_keyID, m_keySecret);

            try
            {
                var    request  = new InitiateMultipartUploadRequest(m_bucket, path);
                var    result   = client.InitiateMultipartUpload(request);
                string uploadId = result.UploadId;

                int partSize = (int)(fileSize / 9990);
                if (partSize < m_blockSize)
                {
                    partSize = m_blockSize;
                }
                int partCount = (int)(fileSize / partSize);
                var partETags = new List <PartETag>();
                using (var fs = File.Open(localPath, FileMode.Open, FileAccess.Read))
                {
                    for (int i = 0; i < partCount; i++)
                    {
                        long skipBytes = partSize * i;
                        fs.Seek(skipBytes, 0);
                        long size = (i < partCount - 1) ? partSize : (fileSize - skipBytes);
                        var  req  = new UploadPartRequest(m_bucket, path, uploadId)
                        {
                            InputStream = fs,
                            PartSize    = size,
                            PartNumber  = i + 1
                        };
                        var res = client.UploadPart(req);
                        partETags.Add(res.PartETag);
                    }
                }

                var completeMultipartUploadRequest = new CompleteMultipartUploadRequest(m_bucket, path, uploadId);
                foreach (var partETag in partETags)
                {
                    completeMultipartUploadRequest.PartETags.Add(partETag);
                }
                client.CompleteMultipartUpload(completeMultipartUploadRequest);
            }
            catch (Exception ex)
            {
                Console.WriteLine("分片上传失败:" + ex.Message);
                return(false);
            }
            return(true);
        }
Ejemplo n.º 26
0
        public string EndMultiPartUpload(long archiveSize, string checksum, string uploadId)
        {
            CompleteMultipartUploadRequest request = new CompleteMultipartUploadRequest()
            {
                ArchiveSize = archiveSize.ToString(),
                Checksum    = checksum,
                UploadId    = uploadId,
                VaultName   = _vault
            };

            CompleteMultipartUploadResponse response = _amazonGlacierClient.CompleteMultipartUpload(request);

            return(response.CompleteMultipartUploadResult.ArchiveId);
        }
Ejemplo n.º 27
0
        /// <summary>
        /// 上传完成
        /// </summary>
        /// <param name="task"></param>
        private void UploadComplete(OssTaskDO task)
        {
            //如果是暂停就跳出
            if (task.Progress < task.TotalProgress - 1)
            {
                //关闭内存流
                this.Close(task);
                //清除配置文件,只有删除状态删除配置
                if (task.Status == OssTaskStatus.DELETE)
                {
                    this.ClearConfig(task);
                }
                return;
            }

            //线上检查
            var ossPath          = CheckOssPath(task.UploadOssPath + @"/" + task.UploadOssName);
            var listPartsRequest = new ListPartsRequest(aliyunOSSConfig.BucketName, ossPath, task.UploadOssId);
            var listPartsResult  = client.ListParts(listPartsRequest);

            //生成Tag
            var             completeMultipartUploadRequest = new CompleteMultipartUploadRequest(aliyunOSSConfig.BucketName, ossPath, task.UploadOssId);
            List <PartETag> eTags = new List <PartETag>();

            foreach (var item in task.UploadETag)
            {
                var values = item.Split(',');
                eTags.Add(new PartETag(Convert.ToInt32(values[0]), values[1], values[2], Convert.ToInt64(values[3])));
            }
            eTags.Sort((x, y) => x.PartNumber.CompareTo(y.PartNumber));
            eTags.ForEach(it => completeMultipartUploadRequest.PartETags.Add(it));


            //合并文件上传完成
            client.CompleteMultipartUpload(completeMultipartUploadRequest);


            //保存配置
            task.Status         = OssTaskStatus.COMPLETE;
            task.ActualProgress = 100;
            SaveOssTaskConfig(taskList);

            //关闭内存流
            this.Close(task);
            //清除配置文件
            this.ClearConfig(task);

            //执行回执
            downloadCompleteCallBack?.Invoke(task);
        }
Ejemplo n.º 28
0
 private static CompleteMultipartUploadResult CompleteUploadPart(OssClient client, string bucketName, string objectName,
                                                                 string uploadId, List <PartETag> partETags)
 {
     return(Retry((_) =>
     {
         var completeMultipartUploadRequest =
             new CompleteMultipartUploadRequest(bucketName, objectName, uploadId);
         foreach (var partETag in partETags)
         {
             completeMultipartUploadRequest.PartETags.Add(partETag);
         }
         return client.CompleteMultipartUpload(completeMultipartUploadRequest);
     }));
 }
Ejemplo n.º 29
0
 /// <summary>
 /// Combine parts.
 /// </summary>
 /// <param name="request">Parameters in a request for combining parts</param>
 /// <returns>Response to the request for combining parts</returns>
 public CompleteMultipartUploadResponse CompleteMultipartUpload(CompleteMultipartUploadRequest request)
 {
     return(this.DoRequest <CompleteMultipartUploadRequest, CompleteMultipartUploadResponse>(request, delegate()
     {
         if (request.ObjectKey == null)
         {
             throw new ObsException(Constants.InvalidObjectKeyMessage, ErrorType.Sender, Constants.InvalidObjectKey, "");
         }
         if (string.IsNullOrEmpty(request.UploadId))
         {
             throw new ObsException(Constants.InvalidUploadIdMessage, ErrorType.Sender, Constants.InvalidUploadId, "");
         }
     }));
 }
    public string CompletePartToCloud()
    {
        // Step 3: complete.
        CompleteMultipartUploadRequest compRequest = new CompleteMultipartUploadRequest();

        compRequest.BucketName = this.DestinationBucket;
        compRequest.Key        = this.DestinationFilename;
        compRequest.UploadId   = initResponse.UploadId;
        compRequest.PartETags  = uploadPartETags;
        string r = "Something went badly wrong";

        using (CompleteMultipartUploadResponse completeUploadResponse = client.CompleteMultipartUpload(compRequest))
            r = completeUploadResponse.ResponseXml;
        return(r);
    }
        private static void UploadPartCopyCallback(IAsyncResult ar)
        {
            var result = _ossClient.EndUploadPartCopy(ar);
            var wrappedContext = (UploadPartCopyContextWrapper)ar.AsyncState;

            var ctx = wrappedContext.Context;
            lock (ctx.SyncLock)
            {
                var partETags = ctx.PartETags;
                partETags.Add(new PartETag(wrappedContext.PartNumber, result.ETag));
                ctx.CompletedParts++;

                if (ctx.CompletedParts == ctx.TotalParts)
                {
                    partETags.Sort((e1, e2) => (e1.PartNumber - e2.PartNumber));
                    var completeMultipartUploadRequest =
                        new CompleteMultipartUploadRequest(ctx.TargetBucket, ctx.TargetObject, ctx.UploadId);
                    foreach (var partETag in partETags)
                    {
                        completeMultipartUploadRequest.PartETags.Add(partETag);
                    }

                    var completeMultipartUploadResult = _ossClient.CompleteMultipartUpload(completeMultipartUploadRequest);
                    Console.WriteLine(@"Async upload multipart copy result : " + completeMultipartUploadResult.Location);

                    ctx.WaitEvent.Set();
                }
            }
        }
        private static CompleteMultipartUploadResult CompleteUploadPart(String bucketName, String objectName,
            String uploadId, List<PartETag> partETags)
        {
            var completeMultipartUploadRequest =
                new CompleteMultipartUploadRequest(bucketName, objectName, uploadId);
            foreach (var partETag in partETags)
            {
                completeMultipartUploadRequest.PartETags.Add(partETag);
            }

            return _ossClient.CompleteMultipartUpload(completeMultipartUploadRequest);
        }