1

I have develop a ASP.NET (C#) application to store the images and videos into Amazon S3. Images are being uploaded fine but when i try to upload videos it saves as an image format in Amazon S3.

Does anyone know what the issue is or how to I can upload videos?

private void Amzon(string imageName,string imgcontenttype,int imglength,byte[] fileData)
{
    AmazonS3 myS3 = new AmazonS3();
    DateTime myTime = DateTime.Now;

    // Create a signature for this operation
    string strMySignature = S3Helper.GetSignature(mySecretAccessKeyId, "PutObjectInline", myTime);

    // Create a new Access grant for anonymous users.
    Grant myGrant = new Grant();
    Grant[] myGrants = new Grant[1];

    // Setup Access control, allow Read access to all
    Group myGroup = new Group();
    myGroup.URI = "http://acs.amazonaws.com/groups/global/AllUsers";
    myGrant.Grantee = myGroup;
    myGrant.Permission = Permission.READ;
    myGrants[0] = myGrant;
    string key = imageName;
    // Setup some metadata to indicate the content type
    MetadataEntry myContentType = new MetadataEntry();
    myContentType.Name = "ContentType";
    myContentType.Value = imgcontenttype;

    MetadataEntry[] myMetaData = new MetadataEntry[1];
    myMetaData[0] = myContentType;

    // Finally upload the object
    PutObjectResult myResult = myS3.PutObjectInline(
        bucketname,
        key,
        myMetaData,
        fileData,
        imglength,
        myGrants,
        StorageClass.STANDARD,
        true,
        myAWSAccessKeyId,
        S3Helper.GetTimeStamp(myTime),
        true,
        strMySignature, null
        );

    // Print out the results.
    if (myResult != null)
    {
        cn.Open();
        Url = "https://s3.amazonaws.com/" + bucketname + "/" + key;
        string Query = "Insert into S3Image(ImageName,ImageUrl)Values('" + key + "','" + Url + "')";
        SqlCommand cmd = new SqlCommand(Query, cn);
        cmd.ExecuteNonQuery();
        cn.Close();
        //MyPrint("ETag: " + myResult.ETag);
        MyPrint("<img src=https://s3.amazonaws.com/" + bucketname + "/" + key);
    }
}

Thank you.

5
  • 1
    what formats of video are you trying to upload? What is the extension of the videos? Can you show us some code? Commented May 20, 2011 at 6:16
  • Thank you for giving Response, i have try .mp4 formate files to upload Commented May 20, 2011 at 6:24
  • Are you able to show us some code? It's a bit hard to work out what the issue could be if without that. Commented May 20, 2011 at 6:25
  • Hi i have paste my code in my above Question Please fin that code .. Commented May 20, 2011 at 6:29
  • Hi any idea for this issue please tell me.... Commented May 20, 2011 at 10:39

1 Answer 1

1

There's a lot of code to get up and running with Amazon's web service. I think this part of code is what you need, you might not be setting the right content type:

// Setup some metadata to indicate the content type 
        MetadataEntry myContentType = new MetadataEntry();
        myContentType.Name = "ContentType";
        myContentType.Value = FileUpload1.PostedFile.ContentType;

Here's the full code: Enjoy.

`private const string accessKeyId = "REMOVED";
    private const string secretAccessKey = "REMOVED";
    private 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;
    }
    private static string GetSignature(string secretAccessKey, 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(secretAccessKey));

        // 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);
    }
    private 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>
    /// Upload Images.
    /// </summary>
    /// <param name="a">Ex. FileUpload1.PostedFile.ContentType</param>
    /// <param name="b">Ex. FileUpload1.PostedFile.FileName</param>
    /// <param name="c">Ex. FileUpload1.FileBytes</param>
    /// <param name="d">Ex. FileUpload1.FileBytes.Length</param>
    /// <param name="id">The ID for this Product Group</param>
    public void UploadImage_ProductGroup(string a, string b, byte[] c, long d, int id)
    {
        AmazonS3 myS3 = new AmazonS3();
        DateTime myTime = DateTime.Now;

        // Create a signature for this operation
        string strMySignature = GetSignature(
        secretAccessKey,
        "PutObjectInline",
        myTime);

        // Create a new Access grant for anonymous users.
        Grant myGrant = new Grant();
        Grant[] myGrants = new Grant[1];

        // Setup Access control, allow Read access to all
        Group myGroup = new Group();
        myGroup.URI = "http://acs.amazonaws.com/groups/global/AllUsers";
        myGrant.Grantee = myGroup;
        myGrant.Permission = Permission.READ;
        myGrants[0] = myGrant;

        // Setup some metadata to indicate the content type 
        MetadataEntry myContentType = new MetadataEntry();
        myContentType.Name = "ContentType";
        myContentType.Value = a;

        MetadataEntry[] myMetaData = new MetadataEntry[1];
        myMetaData[0] = myContentType;

        //Format the file name to prepend thumbnail before the file extension.
      /*  int lastIndex = b.LastIndexOf('.');
        string fileName = b.Remove(lastIndex);
        string ext = b.Remove(0, lastIndex);
        string thumbPath = string.Format("images/public/{0}thumb{1}",fileName,ext);
        //Resize the thumbnail
        */



        // Finally upload the object
        PutObjectResult myResult = myS3.PutObjectInline(
            "mywebsite",
        "images/public/" + b,
            myMetaData,
            c,
            d,
            myGrants,
            StorageClass.STANDARD,
            true,
            accessKeyId,
            GetTimeStamp(myTime),
            true,
            strMySignature, null
        );`
Sign up to request clarification or add additional context in comments.

6 Comments

Hi Nick Thank you for giving responce ,Can u post entire uploaad class.Then only i can find my Problem .. Above i have post my code what i did for uploading please see that code...
You have a variable called imgcontenttype, i'm not able to tell what content type you're actually passing to it.
I get the feeling this could be the case.
just i assign the content type to a variable which i get from upload file ..but u are assign directly like FileUpload1.PostedFile.ContentType;
Hi it is working fine Thank you,But it accept only 1mb file.It doesn't accept more than that,how can i upload more than 1mb please help me...
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.