پرش به مطلب اصلی

لغو بارگذاری چندبخشی آبجکت داخل صندوقچه (Abort Multi-part Upload)

اگر بارگذاری چند بخشی ناموفق بوده و یا از ادامه‌ی بارگذاری بخش‌ها منصرف شدید حتمن باید فرآیند بارگذاری را لغو کنید تا فضای ذخیره‌شده برای این بارگذاری در صندوقچه‌ی شما آزاد شود.

بارگذاری که به اتمام رسیده و فایل نهایی از بخش های مجدد ساخته شده دیگر نیازی به متوقف کردن فرآیند ندارد و فرآیند متوقف کردن فقط برای بارگذاری‌هایی است که شروع شده ولی به اتمام نرسیده‌اند.

اگر هنوز فایل در حال بارگذاری دارید، باید بارگذاری آن‌ها تمام شود و سپس بارگذاری را لغو کنید.

مولفه‌ها

نام آبجکت (Key)

نام آبجکت پس از بارگذاری داخل صندوقچه

نمونه کد لغو بارگذاری چند بخشی فایل

زمان آغاز بارگذاری چند بخشی یک کلید UploadId در جواب به کلاینت داده می‌شود. اگر این کلید را ندارید می‌توانید به کمک کد زیر ابتدا لیست بارگذاری‌های چند بخشی را دریافت و سپس بارگذاری مورد نظر که به اتمام نرسیده است را لغو کنید.

using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Reflection;
using System.Collections;
using Newtonsoft.Json;

namespace ListMultipartUploadExample
{
class ListMultipartUpload
{
private const string bucketName = "<BUCKET_NAME>";
private static IAmazonS3 _s3Client;
public static void Main()
{
var awsCredentials = new Amazon.Runtime.BasicAWSCredentials("<ACCESS-KEY>", "<SECRET-KEY>");
var config = new AmazonS3Config { ServiceURL = "<ENDPOINT>" };
_s3Client = new AmazonS3Client(awsCredentials, config);
ListMultipartUploadAsync().Wait();
}

private static async Task ListMultipartUploadAsync()
{
try
{
ListMultipartUploadsRequest request = new()
{
BucketName = bucketName,
};

ListMultipartUploadsResponse response = await _s3Client.ListMultipartUploadsAsync(request);

Console.WriteLine(JsonConvert.SerializeObject(response, Formatting.Indented));
}
catch (AmazonS3Exception amazonS3Exception)
{
Console.WriteLine("An AmazonS3Exception was thrown. Exception: " + amazonS3Exception.ToString());
}
catch (Exception e)
{
Console.WriteLine("Exception: " + e.ToString());
}
}
}
}


اگر در خروجی کد بالا مقادیر بارگذاری چند بخشی پرینت شد می‌توانید به کمک نمونه کد زیر بارگذاری(ها) را لغو کنید:

// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX - License - Identifier: Apache - 2.0

namespace AbortMultipartUploadExample
{
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System.Reflection;

/// <summary>
/// This example shows how to configure your bucket to allow aborting
/// multipart upload. This example was
/// created using the AWS SDK for .NET 3.7 and .NET Core 5.0.
/// </summary>
public class AbortMultipartUpload
{
// Remember to change the bucket name to the name of an Amazon Simple
// Storage Service (Amazon S3) bucket that exists on your account.
private const string BucketName = "<BUCKET_NAME>";
private const string OBJECT_NAME = "<OBJECT_NAME>";

/// <summary>
/// The Main method creates the the bucket to be able to abort multipart
/// uploads.
/// </summary>
public static async Task Main()
{
var awsCredentials = new Amazon.Runtime.BasicAWSCredentials("<ACCESS-KEY>", "<SECRET-KEY>");
var config = new AmazonS3Config { ServiceURL = "<ENDPOINT>" };
var _s3Client = new AmazonS3Client(awsCredentials, config);

await AbortMultipartUploadAsync(_s3Client);
}

/// <summary>
///
/// </summary>
/// <param name="client"></param>
/// <returns></returns>
private static async Task AbortMultipartUploadAsync(AmazonS3Client client)
{
try
{
var uploadId = "<UPLOAD-ID>";
AbortMultipartUploadRequest request = new()
{
BucketName = BucketName,
Key = OBJECT_NAME,
UploadId = uploadId
};

AbortMultipartUploadResponse response = await client.AbortMultipartUploadAsync(request);

Console.WriteLine($"Multipart upload with ID {uploadId} aborted");
}
catch (AmazonS3Exception amazonS3Exception)
{
Console.WriteLine("An AmazonS3Exception was thrown. Exception: " + amazonS3Exception.ToString());
}
catch (Exception e)
{
Console.WriteLine("Exception: " + e.ToString());
}
}
}
}