Как я могу асинхронно загрузить несколько файлов на Amazon S3 с помощью AWS SDK для .NET?

#.net #amazon-s3

#.net #amazon-s3

Вопрос:

Я пытаюсь асинхронно загрузить несколько файлов на Amazon S3 с помощью .NET SDK. Буду признателен за любые примеры, которые помогут мне начать. Заранее спасибо.

Ответ №1:

Amazon S3 и AWS SDK для .СЕТЕВАЯ функциональность, которую вы ищете, использует высокий уровень.NET API для многокомпонентной загрузки:

AWS SDK для .NET предоставляет высокоуровневый API, который упрощает загрузку из нескольких частей (см. Раздел Загрузка объектов с помощью API загрузки из нескольких частей). Вы можете загружать данные из файла, каталога или потока. […] При желании можно задать дополнительные параметры, такие как размер детали, который вы хотите использовать для загрузки из нескольких частей, количество потоков, которые вы хотите использовать при одновременной загрузке деталей, дополнительные метаданные файла, класс хранилища (СТАНДАРТНЫЙ или REDUCED_REDUNDANCY) или ACL. Высокоуровневый API предоставляет TransferUtilityUploadRequest класс для установки этих дополнительных параметров. [выделение мое]

Пример фрагмента приведен в разделе Загрузка каталога:

 using System;
using System.IO;
using Amazon.S3;
using Amazon.S3.Transfer;

namespace s3.amazon.com.docsamples
{
    class UploadDirectoryMPUHighLevelAPI
    {
        static string existingBucketName = "*** Provide bucket name ***";
        static string directoryPath      = "*** Provide directory name ***";

        static void Main(string[] args)
        {
            try
            {
                TransferUtility directoryTransferUtility =
                    new TransferUtility(new AmazonS3Client(Amazon.RegionEndpoint.USEast1));

                // 1. Upload a directory.
                directoryTransferUtility.UploadDirectory(directoryPath,
                                                         existingBucketName);
                Console.WriteLine("Upload statement 1 completed");

                // 2. Upload only the .txt files from a directory. 
                //    Also, search recursively. 
                directoryTransferUtility.UploadDirectory(
                                               directoryPath,
                                               existingBucketName,
                                               "*.txt",
                                               SearchOption.AllDirectories);
                Console.WriteLine("Upload statement 2 completed");

                // 3. Same as 2 and some optional configuration 
                //    Search recursively for .txt files to upload).
                TransferUtilityUploadDirectoryRequest request =
                    new TransferUtilityUploadDirectoryRequest
                    {
                        BucketName = existingBucketName,
                        Directory = directoryPath,
                        SearchOption = SearchOption.AllDirectories,
                        SearchPattern = "*.txt"
                    };

                directoryTransferUtility.UploadDirectory(request);
                Console.WriteLine("Upload statement 3 completed");
            }

            catch (AmazonS3Exception e)
            {
                Console.WriteLine(e.Message, e.InnerException);
            }
        }
    }
}
  

Комментарии:

1. Это совсем не правильный ответ, поскольку при этом будут загружены все файлы выбранного каталога, но вопрос в том, как загрузить несколько выбранных файлов.

2. Вы можете сделать обходной путь и переименовать нужные выбранные файлы, добавив в конце общий тег. Затем используйте searchPattern как "*-YourTag.txt"

3. Есть ли способ использовать несколько типов расширений файлов в «searchPattern»?