使用ASP.NET C将视频文件上传到Amazon S3#

问题描述:

我开发了一个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

有很多代码可以用来启动和运行亚马逊的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