如何从HttpPostedFile创建字节数组


155

我正在使用具有FromBinary方法的图像组件。想知道如何将输入流转换为字节数组

HttpPostedFile file = context.Request.Files[0];
byte[] buffer = new byte[file.ContentLength];
file.InputStream.Read(buffer, 0, file.ContentLength);

ImageElement image = ImageElement.FromBinary(byteArray);

我们如何将文件发布到另一个.aspx页中?
shivi 2015年

这行不是file.InputStream.Read(buffer,0,file.ContentLength); 用输入流中的字节填充缓冲区?为什么我们应该使用@Wolfwyrd在下面的答案中提到的BinaryReader.ReadBytes(...)?不会ImageElement.FromBinary(buffer); 解决问题?
Srinidhi Shankar

Answers:


290

使用BinaryReader对象从流中返回字节数组,例如:

byte[] fileData = null;
using (var binaryReader = new BinaryReader(Request.Files[0].InputStream))
{
    fileData = binaryReader.ReadBytes(Request.Files[0].ContentLength);
}

1
如下面的jeff所述,b.ReadBytes(file.InputStream.Length); 应该是byte [] binData = b.ReadBytes(file.ContentLength); 因为.Length是一个长整数,而ReadBytes需要一个int。
Spongeboy

记住要关闭BinaryReader。
克里斯·德怀

像魅力一样工作。感谢您提供这种简单的解决方案(并附有jeff,Spongeboy和Chris的评论)!
大卫2010年

29
二进制读取部没有被关闭,因为使用被automaticaly关闭处置的读者有
BeardinaSuit

1
关于为什么此方法不适用于.docx文件的任何想法?stackoverflow.com/questions/19232932/…–
wilsjd


12

如果将文件InputStream.Position设置为流的末尾,则将无法使用。我的其他几行:

Stream stream = file.InputStream;
stream.Position = 0;

3

在您的问题,缓冲区和byteArray似乎都是byte []。所以:

ImageElement image = ImageElement.FromBinary(buffer);

2

在stream.copyto之前,必须将stream.position重置为0; 然后就可以了


2

对于图像,如果您使用的是Web Pages 2,则使用 WebImage类

var webImage = new System.Web.Helpers.WebImage(Request.Files[0].InputStream);
byte[] imgByteArray = webImage.GetBytes();
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.