void SetProgressEventArgs(ProgressUpload progressUpload, bool done) { if (OnSending != null) { var args = new EventProgressArgs() { Done = done, ProgressInfo = progressUpload }; OnSending(this, args); } }
public async Task UploadChunkObject(string bucketKey, OSSFile file) { FileStream data = File.OpenRead(file.Path); var length = data.Length; string objectKey = file.Name; if (await this.GetBucketObject(bucketKey, objectKey) != null) { await this.DeleteObject(bucketKey, objectKey); } string sessionId = "SI" + Path.GetFileNameWithoutExtension(objectKey) + length; ObjectsApi api = new ObjectsApi(); api.Configuration.AccessToken = this.token.AccessToken; int chunkSize = 5 * 1024 * 1024; long chunkCount = (long)Math.Round(0.5 + ((double)length / (double)chunkSize)); long dataWrited = 0; for (int i = 0; i < chunkCount; i++) { long startByte = i * chunkSize; long next = (i + 1) * chunkSize; if (next > length) { next = length - 1; } else { next--; } long byteLength = next - startByte + 1; string bytesRange = string.Format("bytes {0}-{1}/{2}", startByte, next, length); byte[] buffer = new byte[byteLength]; data.Read(buffer, 0, (int)byteLength); MemoryStream ms = new MemoryStream(buffer); ms.Write(buffer, 0, (int)byteLength); ms.Position = 0; var response = await api.UploadChunkAsyncWithHttpInfo(bucketKey, objectKey, (int)byteLength, bytesRange, sessionId, ms); dataWrited += byteLength; double progress = (double)(100 * decimal.Ceiling(dataWrited) / decimal.Ceiling(length)); if (response.StatusCode == 202) { ProgressUpload?.Invoke(false, file, Convert.ToInt32(progress)); } else if (response.StatusCode == 200) { Upload?.Invoke(true, file); break; } else { ErrorOccurred("Error occurred while uploading...\nCode: " + response.StatusCode); break; } } data.Close(); }