Я пытаюсь создать dll, который другой сервис будет использовать для загрузки PDF в S3 Bucket. Я пробовал различные решения, в основном скопированные из документации AWS, или другие ответы, и оба следующие выглядят так, как будто они работают в тестировании, но ничего не загружается в корзину s3.
Попытка 1: асинхронная работаupload
using Amazon.S3;
using Amazon.S3.Transfer;
using System;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
public class UploadFileMPUHighLevelAPITest
{
private const string bucketName = "some-demo";
private const string keyName = "some-key";
private const string filePath = @"C:\Users\ME\Documents\sample.pdf";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.EUWest3;
private static IAmazonS3 s3Client;
public static void Main()
{
s3Client = new AmazonS3Client("*AccessKey*", "*SecretKey*", bucketRegion);
UploadFileAsync().Wait();
}
private static async Task UploadFileAsync()
{
try
{
var fileTransferUtility =
new TransferUtility(s3Client);
// Option 1. Upload a file. The file name is used as the object key name.
await fileTransferUtility.UploadAsync(filePath, bucketName);
Console.WriteLine("Upload 1 completed");
// Option 2. Specify object key name explicitly.
await fileTransferUtility.UploadAsync(filePath, bucketName, keyName);
Console.WriteLine("Upload 2 completed");
// Option 4. Specify advanced settings.
var fileTransferUtilityRequest = new TransferUtilityUploadRequest
{
BucketName = bucketName,
FilePath = filePath,
StorageClass = S3StorageClass.StandardInfrequentAccess,
PartSize = 6291456, // 6 MB.
Key = keyName
};
fileTransferUtilityRequest.Metadata.Add("param1", "Value1");
fileTransferUtilityRequest.Metadata.Add("param2", "Value2");
await fileTransferUtility.UploadAsync(fileTransferUtilityRequest);
Console.WriteLine("Upload 4 completed");
}
catch (AmazonS3Exception e)
{
Console.WriteLine("Error encountered on server. Message:'{0}' when writing an object", e.Message);
}
catch (Exception e)
{
Console.WriteLine("Unknown encountered on server. Message:'{0}' when writing an object", e.Message);
}
}
}
}
Затем я создал консольное приложение для запуска описанного выше:
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
Amazon.DocSamples.S3.UploadFileMPUHighLevelAPITest.Main();
}
}
}
В результате этого были напечатаны операторы журнала, и приложение завершилось без выброса. Но ничего в моем ведре!
Попытка 2: синхронный подход
using System;
using System.Diagnostics;
using Amazon.S3;
using Amazon.S3.Model;
namespace AmazonS3Demo
{
public class AmazonS3Uploader
{
private string bucketName = "some-demo";
private string keyName = "the-name-of-your-file";
private string filePath = "C:\\Users\\ME\\Documents\\sample.pdf";
public void UploadFile(string AWSAccessKey, string AWSSecretKey)
{
var client = new AmazonS3Client(AWSAccessKey, AWSSecretKey, Amazon.RegionEndpoint.EUWest1);
try
{
PutObjectRequest putRequest = new PutObjectRequest
{
BucketName = bucketName,
Key = keyName,
FilePath = filePath,
ContentType = "application/pdf"
};
PutObjectResponse response = client.PutObject(putRequest);
Debug.WriteLine(response.HttpStatusCode);
}
catch (AmazonS3Exception amazonS3Exception)
{
if (amazonS3Exception.ErrorCode != null &&
(amazonS3Exception.ErrorCode.Equals("InvalidAccessKeyId")
||
amazonS3Exception.ErrorCode.Equals("InvalidSecurity")))
{
throw new Exception("Check the provided AWS Credentials.");
}
else
{
throw new Exception("Error occurred: " + amazonS3Exception.Message);
}
}
}
}
}
Опять же, было создано консольное приложение для проверки этого:
using System;
using AmazonS3Demo;
namespace DemoExe
{
class Program
{
static void Main(string[] args)
{
try
{
AmazonS3Uploader s3 = new AmazonS3Uploader();
string AWSAccessKey = "*AccessKey*";
string AWSSecretKey = "*SecretKey";
s3.UploadFile(AWSAccessKey, AWSSecretKey);
}
catch (Exception e)
{
Console.WriteLine(
"Error encountered ***. Message:'{0}' when writing an object"
, e.Message);
}
}
}
}
Почти так же, какв последний раз приложение регистрирует сообщение «ОК», а затем завершает работу. Но нет файла в моем ведре S3!
Может кто-нибудь указать мне правильное направление, пожалуйста?