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.