Загрузите файл в папку S3 bucket, используя ASP.NET SDK - PullRequest
7 голосов
/ 12 августа 2011

Как использовать AWS SDK для ASP.NET для загрузки файла в определенную папку? - Мне удалось загрузить файлы, указав имя корзины (request.WithBucketName), но я хочу иметь возможность загрузить файл в определенную папку внутри самого контейнера.

Это код, который я использую для загрузки файла в одну корзину:

public bool UploadFileToS3(string uploadAsFileName, Stream ImageStream, S3CannedACL filePermission, S3StorageClass storageType, string toWhichBucketName)
{

    try
    {
        client = Amazon.AWSClientFactory.CreateAmazonS3Client(MY_AWS_ACCESS_KEY_ID, MY_AWS_SECRET_KEY);
        PutObjectRequest request = new PutObjectRequest();
        request.WithKey(uploadAsFileName);
        request.WithInputStream(ImageStream);
        request.WithBucketName(toWhichBucketName);
        request.CannedACL = filePermission;
        request.StorageClass = storageType;

        client.PutObject(request);
        client.Dispose();
    }
    catch
    {            
        return false;
    }
    return true;

}

Надеюсь, что этот код поможет вам.

Ответы [ 3 ]

18 голосов
/ 12 августа 2011

Чтобы добавить файл в папку в ведре, необходимо обновить ключ запроса PutObjectRequest, чтобы он включал папку перед именем файла.

public bool UploadFileToS3(string uploadAsFileName, Stream ImageStream, S3CannedACL filePermission, S3StorageClass storageType, string toWhichBucketName)
{
    try
    {
        using(client = Amazon.AWSClientFactory.CreateAmazonS3Client(MY_AWS_ACCESS_KEY_ID, MY_AWS_SECRET_KEY))
        {
           PutObjectRequest request = new PutObjectRequest();
           request.WithKey( "folder" + "/" + uploadAsFileName );
           request.WithInputStream(ImageStream);
           request.WithBucketName(toWhichBucketName);
           request.CannedACL = filePermission;
           request.StorageClass = storageType;

           client.PutObject(request);
        }
    }
    catch
    {            
        return false;
    }
    return true;
}

Это сообщение , в котором говорится о загрузке файлов в папку. Они используют TransferUtilityUploadRequest, но он должен работать с PutObjectRequest. Прокрутите вниз до соответствующего примера.

В этом сообщении показано, как создать папку без загрузки в нее файла.

Надеюсь, это полезно

Edit: Обновлен код для использования блока using вместо вызова Dispose в соответствии с рекомендациями.

2 голосов
/ 03 мая 2016

очень простой способ:

using System;
using System.Web;
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System.Configuration;

/// <summary>
/// Summary description for AWShandler
/// </summary>
public static class AWSHandler
{
    public static void sendFileToS3(string fileName, string storeLocation)
    {
        try
        {
            AmazonS3Client client = new AmazonS3Client(RegionEndpoint.EUWest1);
            PutObjectRequest request = new PutObjectRequest();
            request.BucketName = ConfigurationManager.AppSettings["AWSBucket"].ToString();
            request.FilePath = fileName;
            request.Key = storeLocation + fileName;
            request.ContentType = MimeMapping.GetMimeMapping(fileName);
            PutObjectResponse response = client.PutObject(request);
        }
        catch (Exception ex)
        {
            // use a logger and handle it
        }
    }
}

вам просто нужно поместить ключи в файл web / app.config:

<add key="AWSAccessKey" Value="yourKey" />
<add key="AWSSecretKey" Value="yourSecret" />

Их можно получить на странице вашего аккаунтаконсоль AWS.Они также должны использовать имена, указанные здесь, так как они предварительно определены библиотекой AWS.

2 голосов
/ 04 марта 2014

выглядеть следующим образом

1.Создать объект AmazonS3

2.Создайте ведро

3.Добавить новый файл в Amazon S3

4.Получить файл из Amazon S3

5.Удалите файл из Amazon S3

Амазонка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...