如何在C#中将视频转换为字节数组?

5

我正在使用c# .net compact framework 3.5,希望将视频文件转换为字节数组以便上传到服务器。

类似地,我正在进行图像上传并获得成功结果。

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

如何对视频文件进行此操作?

5
您把整个东西加载到内存中两次了。最好打开一个FileStream,并将它分块地复制到请求流中。参见https://dev59.com/iHVC5IYBdhLWcg3woStW和http://stackoverflow.com/questions/1493594/writing-a-stream-to-the-response-in-asp-net以及http://stackoverflow.com/questions/674651/uploading-files-past-asp-net-request-length-limit。 - user1228
1个回答

12

你应该一次复制一个块而不是将整个文件读入数组。否则,由于视频文件可能会变得非常大,将使用大量的内存。

例如:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接