Búsqueda


Categorías

C# [15]
PHP [6]
Zend [1]
FileMaker [1]
.NET [6]
CVS [3]
General [9]
Javascript [2]
Paypal [1]
.NET Compact Framework [3]
C++ [1]
mysql [4]
Linux [1]

Últimos post

Dónde guardar los archivos de configuración en ClickOnce
phpinfo: Valores en error_reporting
Notes about Zend Server and Zend Studio setup
What's new in C# 4
Resolving a 'sticky tag is not a branch' error
Resumen del CodeCamp
CodeCamp Tarragona 2009
Acerca de la calidad del código
ClickOnce en Linux
Programando en PHP (y con CVS) en Visual Studio 2008

Sindicación

RSS 0.90
RSS 1.0
RSS 2.0
Atom 0.3

Nuevo Amazon S3 (2008-05-02)

ctg | 06 Mayo, 2008 13:31

Amazon Simple Storage Service (Amazon S3), conocido como S3, es un servicio que proporciona amazon.com que permite almacenar y recuperar tus datos como un disco duro virtual se tratase, a un precio muy bajo. En nuestro trabajo llevamos un año aproximádamente utilizándolo para hacer copias de seguridad.

Además utiliza los standards SOAP y REST y por ello, se puede acceder desde cualquier lenguaje actual (C#, PHP, Java y alguno más). También hay un plug-in para Firefox que te permite acceder, S3 Organizer.

Pongo un pequeño ejemplo, en C# para crear un bucket y subir un fichero.

Primero crear un fichero, llamado S3Helper.cs. Esta pequeña clase es una utilidad para trabajar más cómodamente con S3.

using System;
using System.Text;
using System.Security.Cryptography;

/// <summary>
/// Summary description for S3Helper
/// </summary>
public class S3Helper
{
    public S3Helper()
    {
        //
        // TODO: Add constructor logic here
        //
    }

    /// <summary>
    /// Formats the provided time as a string limited to millisecond precision
    /// </summary>
    /// <param name="myTime"></param>
    /// <returns></returns>
    public static string FormatTimeStamp(DateTime myTime)
    {
        DateTime myUniversalTime = myTime.ToUniversalTime();
        return myUniversalTime.ToString("yyyy-MM-dd\\THH:mm:ss.fff\\Z", System.Globalization.CultureInfo.InvariantCulture);
    }

    /// <summary>
    /// Returns a new DateTime object set to the provided time
    /// but with precision limited to milliseconds.
    /// </summary>
    /// <param name="myTime"></param>
    /// <returns></returns>
    public static DateTime GetTimeStamp(DateTime myTime)
    {
        DateTime myUniversalTime = myTime.ToUniversalTime();
        DateTime myNewTime = new DateTime(myUniversalTime.Year, myUniversalTime.Month, myUniversalTime.Day,
                                 myUniversalTime.Hour, myUniversalTime.Minute, myUniversalTime.Second,
                                 myUniversalTime.Millisecond);

        return myNewTime;

    }

    public static string GetSignature(string mySecretAccessKeyId, string strOperation, DateTime myTime)
    {
        Encoding myEncoding = new UTF8Encoding();

        // Create the source string which is used to create the digest
        string mySource = "AmazonS3" + strOperation + FormatTimeStamp(myTime);

        // Create a new Cryptography class using the
        // Secret Access Key as the key
        HMACSHA1 myCrypto = new HMACSHA1(myEncoding.GetBytes(mySecretAccessKeyId));

        // Convert the source string to an array of bytes
        char[] mySourceArray = mySource.ToCharArray();

        // Convert the source to a UTF8 encoded array of bytes
        byte[] myUTF8Bytes = myEncoding.GetBytes(mySourceArray);

        // Calculate the digest
        byte[] strDigest = myCrypto.ComputeHash(myUTF8Bytes);

        return Convert.ToBase64String(strDigest);
    }
}

 

Y a continuación, el código para crear un bucketname y subir un fichero:

 

// Add web reference http://doc.s3.amazonaws.com/2006-03-01/AmazonS3.wsdl

using <yourappnamespace>.com.amazonaws.s3.doc;

try
{
    using (var s3 = new AmazonS3())
    {
        var s3 = new AmazonS3();
        var currentTime = DateTime.Now;
        const string myAWSAccessKeyId = <my S3 access key>;
        const string mySecretAccessKeyId = <my S3 secrect access key>;

        // Create a bucket
        CreateBucketResult myCreateResult = s3.CreateBucket(
            <bucket name>,
            null,
            myAWSAccessKeyId,
            S3Helper.GetTimeStamp(currentTime),
            true,
            S3Helper.GetSignature(mySecretAccessKeyId, "CreateBucket", currentTime)
            );
   
        // Get data to upload
        const string fileName = "fileName.ext";
        byte [] bytesToWrite = File.ReadAllBytes(fileName);
   
        // Finally upload the object
        PutObjectResult putObjectResult = s3.PutObjectInline(
            <bucket name>,
            fileName,
            null,
            bytesToWrite,
            bytesToWrite.Length,
            null,
            StorageClass.STANDARD,
            true,
            myAWSAccessKeyId,
            S3Helper.GetTimeStamp(currentTime),
            true,
            S3Helper.GetSignature(mySecretAccessKeyId, "PutObjectInline", currentTime),
            null
                    );
    }
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message);
}

Posted in General . Comentario: (0). Retroenlaces:(0). Enlace
«Next post | Previous post»

Comentarios

Deja un comentario
















Primavera, verano, otoño y: