无法转换字节数组中的文件

时间:2018-04-11 07:41:24

标签: c# asp.net-mvc file-upload

当我尝试使用此代码将文件转换为字节数组时,我遇到了一个问题

var fileByte = new byte[pic.ContentLength];

它转换文件但是上传文件时它已损坏。 当我尝试另一个代码转换文件,即

   var pic = System.Web.HttpContext.Current.Request.Files["ImagePath"];
   byte[] bytes = System.IO.File.ReadAllBytes(pic.FileName);

它抛出了像

这样的异常
  

无法找到文件' C:\ Program Files \ IIS Express \ slide2.jpg'。

在我试过这个词之后

byte[] b = StreamFile(pic.FileName);

private byte[] StreamFile(string filename)
    {
        FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read);

        Create a byte array of file stream length
        byte[] ImageData = new byte[fs.Length];

        //Read block of bytes from stream into the byte array
        fs.Read(ImageData, 0, System.Convert.ToInt32(fs.Length));

        //Close the File Stream
        fs.Close();
        return ImageData; //return the byte data
    }

但它也像

一样抛出和异常
  

无法找到文件' C:\ Program Files \ IIS Express \ slide2.jpg'。

1 个答案:

答案 0 :(得分:3)

第一行代码没有将文件转换为字节数组,它只是创建一个大小为pic.ContentLength的字节数组。

第二个示例会抛出一个异常,该异常明确指出您没有指定路径上的图像(由pic.FileName定义)。

要解决此问题,您应该使用请求的文件Stream并将其写入字节数组。

var pic = System.Web.HttpContext.Current.Request.Files["ImagePath"];
byte[] bytes;
using (var stream = new MemoryStream())
{
   pic.InputStream.CopyTo(stream);
   bytes = stream.ToArray();
}