2010-06-18 10 views
15

Bu dosyayı HttpWebRequest ile birlikte gönderme aşamasındayım. Benim dosyam FileUpload UI'den olacak. Burada, HttpWebRequest ile birlikte akışı göndermek için File Upload'u filestream'e dönüştürmem gerekiyor. FileUpload'u bir filestream'e nasıl dönüştürebilirim?FileUpream için FileUpload

+1

gerekmiyorsa aslında ne çalıştığınız bir FileUpload dosya koyabilirsiniz başarmak ? –

+1

Dosyayı bir etki alanından diğerine aktarmam gerekiyor. yüklenen dosyayı alın ve HttpWebRequest –

cevap

20

, bir bayt dizisine dönüştürmek için aşağıdaki kod kullanılır

public static byte[] ReadFully(Stream input) 
{ 
    byte[] buffer = new byte[input.Length]; 
    //byte[] buffer = new byte[16 * 1024]; 
    using (MemoryStream ms = new MemoryStream()) 
    { 
     int read; 
     while ((read = input.Read(buffer, 0, buffer.Length)) > 0) 
     { 
      ms.Write(buffer, 0, read); 
     } 
     return ms.ToArray(); 
    } 
} 
+0

, PostedFile'ın .InputStream .. thanks olduğunu bilmiyordu. – lawphotog

3

FileUpload'u bir FileStream'e dönüştürebilirsiniz. Ancak, bu FileUpload'ın PostedFile özelliğinden bir MemoryStream alabilirsiniz. Daha sonra HttpWebRequest'inizi doldurmak için bu MemoryStream'i kullanabilirsiniz. FileUpload.PostedFile.InputStream Beni akışı sağlıyor yana

+2

'u kullanarak gönderin. Lütfen ayrıntılı bir şekilde, bir kod örneği veya bağlantı ile detaylandırır mısınız? – PeterX

+0

@PeterX: Örnek için Extremeswank'ın cevabına bakın. – ErikHeemskerk

11

çıkış akımına doğrudan giriş akımı borusuna daha iyi olabilir:

inputStream.CopyTo(outputStream); 

Bu şekilde yeniden iletilmeden önce tüm dosyayı belleğe belleğe almazsınız.

FileUpload fu; // Get the FileUpload object for the current connection here. 
HttpWebRequest hr; // Set up your outgoing connection here. 
using (Stream s = hr.GetRequestStream()) 
{ 
    fu.PostedFile.InputStream.CopyTo(s); 
    s.Flush(); 
} 

daha olacak: That başka bir web isteği doğrudan yazmak isteseydim

FileUpload fu; // Get the FileUpload object. 
using (FileStream fs = File.OpenWrite("file.dat")) 
{ 
    fu.PostedFile.InputStream.CopyTo(fs); 
    fs.Flush(); 
} 

, aşağıdakileri yapabilirsiniz: Örneğin, burada bir FileStream bunu yazardı nasıl etkin olarak, giriş dosyasını doğrudan hedef sunucuya aktaracağınız gibi, önce bellekte veya diskte önbelleğe alma olmadan.

+0

PostedFile'a eriştiğinizde, dosya zaten tamamen ASP.NET tarafından arabelleğe alınmıştır. Bu, yalnızca 'HttpRequest.GetBufferlessInputStream() '(.NET 4 veya üstü) kullanılarak engellenebilir, ancak bu da tüm istek gövdesini kendiniz ayrıştırmanızı gerektirir. – ErikHeemskerk

1

Sen FileBytes (Tech Jerk konumuna basitleştirilmiş cevap)

using (MemoryStream ms = new MemoryStream(FileUpload1.FileBytes)) 
{ 
    //do stuff 
} 

Ya kullanarak bir MemoryStream doğrudan bir MemoryStream

byte[] bin = FileUpload1.FileBytes; 
İlgili konular