HttpPostedFile'dan bayt dizisi nasıl oluşturulur


155

FromBinary yöntemi olan bir görüntü bileşeni kullanıyorum. Giriş akışımı bir bayt dizisine nasıl dönüştürebileceğimi merak ediyorum

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

ImageElement image = ImageElement.FromBinary(byteArray);

dosyayı başka bir .aspx sayfasına nasıl gönderiyoruz?
shivi

Bu satır dosyası değil mi.InputStream.Read (buffer, 0, file.ContentLength); arabelleği giriş akışından gelen baytlarla doldurmak? Aşağıdaki cevapta neden @Wolfwyrd tarafından belirtildiği gibi BinaryReader.ReadBytes (...) kullanmalıyız ? Olmaz ImageElement.FromBinary (tampon); sorunu çöz?
Srinidhi Shankar

Yanıtlar:


290

Akıştan bir bayt dizisi döndürmek için bir BinaryReader nesnesi kullanın:

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

1
Aşağıda jeff tarafından belirtildiği gibi, b.ReadBytes (file.InputStream.Length); bayt olmalıdır [] binData = b.ReadBytes (file.ContentLength); Uzunluğu uzun, ReadBytes ise int.
Süngerboy

BinaryReader'ı kapatmayı unutmayın.
Chris Dwyer

Bir cazibe gibi çalış. Bu basit çözüm için teşekkürler (jeff, Spongeboy ve Chris yorumlarıyla)!
David

29
İkili okuyucunun kapatılması gerekmez, çünkü okuyucuyu otomatik olarak kapanan bir kullanım vardır
BeardinaSuit 28:11

1
Bunun neden bir .docx dosyası için işe yaramayacağına dair bir fikriniz var mı? stackoverflow.com/questions/19232932/…
wilsjd

25
BinaryReader b = new BinaryReader(file.InputStream);
byte[] binData = b.ReadBytes(file.InputStream.Length);

satır 2 ile değiştirilmelidir

byte[] binData = b.ReadBytes(file.ContentLength);

12

InputStream.Position dosyanız akışın sonuna ayarlanmışsa çalışmaz. Ek satırlarım:

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

3

sorunuzda, hem buffer hem de byteArray byte [] gibi görünüyor. Yani:

ImageElement image = ImageElement.FromBinary(buffer);

2

stream.copyto'dan önce stream.position değerini 0 olarak sıfırlamanız gerekir; o zaman iyi çalışıyor.


2

Web Pages v2 kullanıyorsanız WebImage Sınıfını kullanıyorsanız görüntüler için

var webImage = new System.Web.Helpers.WebImage(Request.Files[0].InputStream);
byte[] imgByteArray = webImage.GetBytes();
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.