web-dev-qa-db-fra.com

Comment télécharger un fichier sur Amazon S3 super facilement à l'aide de c #

Je suis fatigué de tous ces exemples et tutoriels "upload to S3" qui ne fonctionnent pas. Quelqu'un peut-il simplement me montrer un exemple qui fonctionne simplement et qui est super facile?

30
EKanadily

eh bien voici les instructions que vous devez suivre pour obtenir un programme de démonstration entièrement fonctionnel ...

1-Téléchargez et installez le SDK de services Web Amazon pour .NET que vous pouvez trouver dans ( http://aws.Amazon.com/sdk-for-net/ ). parce que j'ai visual studio 2010, j'ai choisi d'installer le SDK 3.5 .NET.

2- ouvrir visual studio et créer un nouveau projet, j'ai visual studio 2010 et j'utilise un projet d'application console.

3- Ajoutez une référence à AWSSDK.dll, il est installé avec le SDK du service Web Amazon mentionné ci-dessus. Dans mon système, le fichier DLL est situé dans "C:\Programmes (x86)\SDK AWS pour .NET\bin\Net35\AWSSDK .dll ".

4- Créez un nouveau fichier de classe, appelez-le "AmazonUploader" ici le code complet de la classe:

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- ajouter un fichier de configuration: faites un clic droit sur votre projet dans l'explorateur de solutions et choisissez "ajouter" -> "nouvel élément" puis choisissez dans la liste le type "Fichier de configuration de l'application" et cliquez sur le bouton "ajouter". un fichier appelé "App.config" est ajouté à la solution.

6- éditez le fichier app.config: double-cliquez sur le fichier "app.config" dans l'explorateur de solutions, le menu d'édition apparaîtra. remplacez tout le texte par le texte suivant:

<?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>

vous devez modifier le texte ci-dessus pour refléter votre identifiant de clé Amazon Access et votre clé d'accès secrète.

7- maintenant dans le fichier program.cs (rappelez-vous qu'il s'agit d'une application console) écrivez le code suivant:

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- remplacez les chaînes dans le code ci-dessus par vos propres données 

9- ajoutez une correction d'erreur .__ et votre programme est prêt 

47
EKanadily

La solution de @docesam est destinée à une ancienne version de AWSSDK. Voici un exemple avec la dernière documentation d'AmazonS3:

1) Ouvrez tout d'abord Visual Studio (j'utilise VS2015) et créez un nouveau projet -> Application Web ASP.NET -> MVC.

2) Parcourez dans Gérer le package Nuget, le package AWSSDK.S3 et installez-le.

3) Maintenant, créez une classe nommée AmazonS3Uploader, puis copiez et collez ce code:

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) Editez votre fichier Web.config en ajoutant les lignes suivantes dans <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) Appelez maintenant votre méthode UploadFile à partir de HomeController.cs pour la tester:

public class HomeController : Controller
    {
        public ActionResult Index()
        {
            AmazonS3Uploader amazonS3 = new AmazonS3Uploader();

            amazonS3.UploadFile();
            return View();
        }
    ....

6) Trouvez votre fichier dans votre compartiment Amazon S3 et c'est tout.

Télécharger mon projet de démonstration

33
mejiamanuel57

J'ai récemment utilisé WinSCP qui se connecte directement à Amazon S3. Très facile, comme FTP.

0
Panayiotis Hiripis