Я устал от всех этих "загрузок на S3" примеров и обучающих программ, которые не работают, может кто-нибудь просто покажет мне пример, который просто работает и очень просто?
Как загрузить файл на Amazon S3 очень просто, используя С#
Ответ 1
ну вот инструкция, которой вы должны следовать, чтобы получить полностью работающую демонстрационную программу...
1-Загрузите и установите SDK веб-сервисов Amazon для .NET, который вы можете найти в (http://aws.amazon.com/sdk-for-net/). Поскольку у меня есть Visual Studio 2010, я решил установить 3.5.NET SDK.
2- Откройте Visual Studio и создайте новый проект, у меня Visual Studio 2010, и я использую проект консольного приложения.
3- добавить ссылку на AWSSDK.dll, он устанавливается вместе с упомянутым выше SDK веб-службы Amazon, в моей системе dll находится в "C:\Program Files (x86)\AWS SDK для .NET\bin\Net35 \". AWSSDK.dll".
4- создайте новый файл класса, назовите его "AmazonUploader", вот полный код класса:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Amazon;
using Amazon.S3;
using Amazon.S3.Transfer;
namespace UploadToS3Demo
{
public class AmazonUploader
{
public bool sendMyFileToS3(string localFilePath, string bucketName, string subDirectoryInBucket, string fileNameInS3)
{
// input explained :
// localFilePath = the full local file path e.g. "c:\mydir\mysubdir\myfilename.zip"
// bucketName : the name of the bucket in S3 ,the bucket should be alreadt created
// subDirectoryInBucket : if this string is not empty the file will be uploaded to
// a subdirectory with this name
// fileNameInS3 = the file name in the S3
// create an instance of IAmazonS3 class ,in my case i choose RegionEndpoint.EUWest1
// you can change that to APNortheast1 , APSoutheast1 , APSoutheast2 , CNNorth1
// SAEast1 , USEast1 , USGovCloudWest1 , USWest1 , USWest2 . this choice will not
// store your file in a different cloud storage but (i think) it differ in performance
// depending on your location
IAmazonS3 client = Amazon.AWSClientFactory.CreateAmazonS3Client(RegionEndpoint.EUWest1);
// create a TransferUtility instance passing it the IAmazonS3 created in the first step
TransferUtility utility = new TransferUtility(client);
// making a TransferUtilityUploadRequest instance
TransferUtilityUploadRequest request = new TransferUtilityUploadRequest();
if (subDirectoryInBucket == "" || subDirectoryInBucket == null)
{
request.BucketName = bucketName; //no subdirectory just bucket name
}
else
{ // subdirectory and bucket name
request.BucketName = bucketName + @"/" + subDirectoryInBucket;
}
request.Key = fileNameInS3 ; //file name up in S3
request.FilePath = localFilePath; //local file name
utility.Upload(request); //commensing the transfer
return true; //indicate that the file was sent
}
}
}
5- добавьте файл конфигурации: щелкните правой кнопкой мыши свой проект в обозревателе решений и выберите "добавить" → "новый элемент", затем в списке выберите тип "Файл конфигурации приложения" и нажмите кнопку "Добавить". файл с именем "App.config" добавляется к решению.
6- отредактируйте файл app.config: дважды щелкните файл "app.config" в обозревателе решений, появится меню редактирования. заменить весь текст следующим текстом:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="AWSProfileName" value="profile1"/>
<add key="AWSAccessKey" value="your Access Key goes here"/>
<add key="AWSSecretKey" value="your Secret Key goes here"/>
</appSettings>
</configuration>
Вы должны изменить приведенный выше текст, чтобы он соответствовал идентификатору ключа доступа Amazon и секретному ключу доступа.
7- теперь в файле program.cs (помните, что это консольное приложение) напишите следующий код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace UploadToS3Demo
{
class Program
{
static void Main(string[] args)
{
// preparing our file and directory names
string fileToBackup = @"d:\mybackupFile.zip" ; // test file
string myBucketName = "mys3bucketname"; //your s3 bucket name goes here
string s3DirectoryName = "justdemodirectory";
string s3FileName = @"mybackupFile uploaded in 12-9-2014.zip";
AmazonUploader myUploader = new AmazonUploader();
myUploader.sendMyFileToS3(fileToBackup, myBucketName, s3DirectoryName, s3FileName);
}
}
}
8- замените строки в коде выше вашими собственными данными
9- добавьте исправление ошибок, и ваша программа готова
Ответ 2
Решение @docesam предназначено для старой версии AWSSDK. Вот пример с последней документацией AmazonS3:
1) Сначала откройте Visual Studio (я использую VS2015) и создаю новый проект → веб-приложение ASP.NET → . MVC.
2) Просмотрите в разделе "Управление пакетом Nuget" пакет AWSSDK.S3 и установите его.
3) Теперь создайте класс с именем AmazonS3Uploader
, затем скопируйте и вставьте этот код:
using System;
using Amazon.S3;
using Amazon.S3.Model;
namespace AmazonS3Demo
{
public class AmazonS3Uploader
{
private string bucketName = "your-amazon-s3-bucket";
private string keyName = "the-name-of-your-file";
private string filePath = "C:\\Users\\yourUserName\\Desktop\\myImageToUpload.jpg";
public void UploadFile()
{
var client = new AmazonS3Client(Amazon.RegionEndpoint.USEast1);
try
{
PutObjectRequest putRequest = new PutObjectRequest
{
BucketName = bucketName,
Key = keyName,
FilePath = filePath,
ContentType = "text/plain"
};
PutObjectResponse response = client.PutObject(putRequest);
}
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);
}
}
}
}
}
4) Отредактируйте файл Web.config, добавив следующие строки внутри <appSettings></appSettings>
:
<add key="AWSProfileName" value="any name for your profile"/>
<add key="AWSAccessKey" value="your Access Key goes here"/>
<add key="AWSSecretKey" value="your Secret Key goes here"/>
5) Теперь вызовите ваш метод UploadFile
из HomeController.cs, чтобы проверить его:
public class HomeController : Controller
{
public ActionResult Index()
{
AmazonS3Uploader amazonS3 = new AmazonS3Uploader();
amazonS3.UploadFile();
return View();
}
....
6) Найдите свой файл в своем ковре Amazon S3 и все.
Ответ 3
Решение @mejiamanuel57 отлично работает для небольших файлов размером до 15 МБ. Для больших файлов я получал System.Net.Sockets.SocketException: The I/O operation has been aborted because of either a thread exit or an application request
. Следующее улучшенное решение работает для больших файлов (протестировано с файлом 50 МБ):
...
public void UploadFile()
{
var client = new AmazonS3Client(Amazon.RegionEndpoint.USEast1);
var transferUtility = new TransferUtility(client);
try
{
TransferUtilityUploadRequest transferUtilityUploadRequest = new TransferUtilityUploadRequest
{
BucketName = bucketName,
Key = keyName,
FilePath = filePath,
ContentType = "text/plain"
};
transferUtility.Upload(transferUtilityUploadRequest); // use UploadAsync if possible
}
...
Больше информации здесь.
Ответ 4
Я недавно использовал WinSCP, который напрямую подключается к Amazon S3. Очень просто, как FTP.
Ответ 5
Я последовал за этим, но получаю:
К корзине, к которой вы пытаетесь получить доступ, необходимо обратиться с помощью указанной конечной точки. Пожалуйста, отправляйте все будущие запросы на эту конечную точку.
Я звоню ниже, используя:
bool _ret = await AWS.Send_File_To_S3(_base64, "mybucket", "", "test.png");
==========================
byte[] _bytes = System.Convert.FromBase64String(_base64.Substring(_base64.IndexOf(',') + 1));
IAmazonS3 client = new AmazonS3Client(_access_key, _access_secret, RegionEndpoint.SAEast1);
TransferUtility utility = new TransferUtility(client);
TransferUtilityUploadRequest request = new TransferUtilityUploadRequest();
if (string.IsNullOrEmpty(_subDirectoryInBucket))
{
request.BucketName = _bucketName;
}
else
{ // subdirectory and bucket name
request.BucketName = _bucketName + @"/" + _subDirectoryInBucket;
}
request.Key = _fileNameInS3; //file name up in S3
request.InputStream = new MemoryStream(_bytes);
await utility.UploadAsync(request); //commensing the transfer
Что я пропустил?
Пожалуйста, помогите, спасибо Дон
Ответ 6
Загрузка файла в корзину S3 с использованием низкоуровневого API:
IAmazonS3 client = new AmazonS3Client("AKI...access-key...", "+8Bo...secrey-key...", RegionEndpoint.APSoutheast2);
FileInfo file = new FileInfo(@"c:\test.txt");
string destPath = "folder/sub-folder/test.txt";
PutObjectRequest request = new PutObjectRequest()
{
InputStream = file.OpenRead(),
BucketName = "my-bucket-name",
Key = destPath // <-- in S3 key represents a path
};
PutObjectResponse response = client.PutObject(request);
Загрузка файла в корзину S3 с использованием высокоуровневого API:
IAmazonS3 client = new AmazonS3Client("AKI...access-key...", "+8Bo...secrey-key...", RegionEndpoint.APSoutheast2);
FileInfo localFile = new FileInfo(@"c:\test.txt");
string destPath = @"folder\sub-folder\test.txt";
S3FileInfo s3File = new S3FileInfo(client, "my-bucket-name", destPath);
if (!s3File.Exists)
{
using (var s3Stream = s3File.Create()) // <-- create file in S3
{
localFile.OpenRead().CopyTo(s3Stream); // <-- copy the content to S3
}
}
Для получения дополнительной информации см. мой учебник.
Ответ 7
Пример на сайте AWS работал для меня: https://docs.aws.amazon.com/AmazonS3/latest/dev/HLuploadFileDotNet.html
Хотя он был установлен в другой регион, который возвратил ошибку:
//приватное статическое чтение только RegionEndpoint bucketRegion = RegionEndpoint.USWest2; частная статическая только для чтения RegionEndpoint bucketRegion = RegionEndpoint.USWest1;
Я настроил свое ведро с Северной Калифорнией, которая является USWest1.