当我尝试使用此代码将文件转换为字节数组时,我遇到了一个问题
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'。
答案 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();
}