Nuevo Amazon S3 (2008-05-02)
ctg | 06 Mayo, 2008 13:31Amazon 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»