2011-05-20 137 views
1

我開發了一個ASP.NET(C#)應用程序,用於將圖像和視頻存儲到Amazon S3中。圖片上傳正常,但是當我嘗試上傳視頻時,它將其保存爲Amazon S3中的圖像格式。使用ASP.NET C將視頻文件上傳到Amazon S3#

有誰知道這個問題是什麼或如何上傳視頻?

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); 
    } 
} 

謝謝。

+1

你試圖上傳什麼格式的視頻?視頻的擴展名是什麼?你能告訴我們一些代碼嗎? – 2011-05-20 06:16:37

+0

感謝您給予迴應,我已嘗試.mp4檔案文件上傳 – 2011-05-20 06:24:03

+0

您是否能夠向我們展示一些代碼?如果沒有這個問題,要弄清楚問題可能會有點困難。 – 2011-05-20 06:25:43

回答

1

有很多代碼可以用來啓動和運行亞馬遜的web服務。我認爲,這部分代碼是你需要什麼,你可能不會設置正確的內容類型:

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

下面是完整的代碼:享受。

`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 
     );` 
+0

嗨尼克感謝您給予迴應,你可以發佈整個uploaad class.Then只有我可以找到我的問題..以上我發佈我的代碼,我做了什麼上傳,請參閱代碼... – 2011-05-20 06:32:57

+0

你有一個變量稱爲imgcontenttype,我無法告訴你實際傳遞給它的內容類型。 – 2011-05-20 06:37:03

+0

我感覺這可能是這種情況。 – 2011-05-20 06:37:35