2009-10-20 8 views
1

J'utilise C# .net compact framework 3.5 et je veux convertir un fichier vidéo en tableau d'octets afin que je puisse le télécharger sur le serveur.Comment faire pour convertir vidéo en byte Array en C# (c sharp)?

Dans la même manière que je fais le téléchargement de l'image qui devient le résultat de succès ....

HttpWebRequest request; 
    request.ContentType = "image/jpeg"; 
    request.ContentLength = byteArray.Length; 
    request.Method = "PUT"; 

    imageToByteArray(img).CopyTo(byteArray, 0); 
    using (Stream requestStream = request.GetRequestStream()) 
    { 
     requestStream.Write(byteArray, 0, (int)Fs.Length); 
     requestStream.Flush(); 
     requestStream.Close(); 
    } 


    public byte[] imageToByteArray(Image imageIn) 
    { 
     MemoryStream ms = new MemoryStream(); 
     imageIn.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg); 
     return ms.ToArray(); 
    } 

Quelqu'un ayant l'idée comment faire pour les fichiers vidéo?

+5

Vous chargez la chose en mémoire deux fois. Mieux vaut ouvrir un FileStream et le copier dans le flux de requête en morceaux. voir http://stackoverflow.com/questions/230128/best-way-to-copy-between-two-stream-instances-c et http://stackoverflow.com/questions/1493594/writing-a-stream-to -le-response-in-asp-net et http://stackoverflow.com/questions/674651/uploading-files-past-asp-net-request-length-limit – Will

Répondre

9

Vous devez copier le flux un bloc à la fois au lieu de lire le fichier entier dans un tableau. Sinon, vous utiliserez potentiellement une très grande quantité de mémoire car les fichiers vidéo peuvent devenir assez volumineux.

Par exemple:

HttpWebRequest request; 
request.Method = "PUT"; 

using(Stream requestStream = request.GetRequestStream()) 
using(Stream video = File.OpenRead("Path")) { 
    byte[] buffer = new byte[4096]; 

    while(true) { 
     int bytesRead = video.Read(buffer, 0, buffer.Length); 

     if (bytesRead == 0) break; 
     requestStream.Write(buffer, 0, bytesRead); 
    } 
} 
Questions connexes