08. oktober 2007 - 11:31
Der er
5 kommentarer og 1 løsning
Hente remote fil med WebRequest og send den til Klient
Jeg er istand til at hente websider og vise dem korrekt på en portal side. nu vil jeg så igang med at hente filer remote, og sende disse til klienten - det hele igennem portalen. Jeg opretter et WeRequest objekt som henter filen: // C# - Hent fil WebRequest objWebRequest = WebRequest.Create(objURI); WebResponse objWebResponse = objWebRequest.GetResponse(); Stream objStream = objWebResponse.GetResponseStream(); StreamReader objStreamReader = new StreamReader(objStream); if (objWebResponse.ContentType.Contains("text/")) { ... } else //file { Stream ResponseReader = objWebResponse.GetResponseStream(); gadget.BinaryFile = new byte[(int)objWebResponse.ContentLength]; //Clear'n'Prepare buffer ResponseReader.Read(gadget.BinaryFile, 0, (int)objWebResponse.ContentLength); gadget.FileContentType = objWebResponse.ContentType; gadget.FileName = (new Uri(strURI).Segments)[(new Uri(strURI).Segments).Length - 1]; } Herefter vil jeg i Page_Load sende filen til brugeren: //C# -- Send fil Response.Clear(); Response.AddHeader("Content-Disposition", "filename=" + GadgetList[GadgetList.HasFile()].FileName); Response.AddHeader("Content-Length", GadgetList[GadgetList.HasFile()].BinaryFile.Length.ToString()); Response.ContentType = GadgetList[GadgetList.HasFile()].FileContentType; Response.BinaryWrite(GadgetList[GadgetList.HasFile()].BinaryFile); Response.End(); ------ GadgetList er en Indexer af Gadgets, som kan hente en Gadget ud af en List. en Gadget indeholder bl.a. de public properties: string FileName, char[] BinaryFile og string ContentType som er hhv. min buffer og dennes egenskaber. Mit problem er at filen kun er fyldt med data i staten, resten er 0x00'er dvs. de første cirka 50 KB indeholder data... hvad gør jeg galt =
Annonceindlæg tema
Forsvar & beredskab
Cybersikkerhed, realtidsdata og robuste it-systemer er blevet fundamentet for moderne forsvar.
08. oktober 2007 - 12:00
#1
Jeg har leget lidt med at bruge en do{}while til at læse buffered ind i min byte[] ... men klienten modtager stadig væk kun en fil med nogle kb header og en masse nulls !
08. oktober 2007 - 14:05
#2
gadget.FileContentType = objWebResponse.ContentType; Stream ResponseReader = objWebResponse.GetResponseStream(); gadget.BinaryFile = new byte[(int)objWebResponse.ContentLength]; //Clear'n'Prepare buffer int bytesread = 0, processed = 0, length = (int)objWebResponse.ContentLength; do{ if (length - processed > 1024) bytesread = ResponseReader.Read(gadget.BinaryFile, processed, 1024); else bytesread = ResponseReader.Read(gadget.BinaryFile, processed, length - processed); processed += bytesread; }while(length > processed); ^--- virker heller ik :(... den hænger bare !
08. oktober 2007 - 18:20
#3
Du skal bruge en løkke. En Read læser de data der er modtaget - den venter ikke på "alle" data. Normalt er: byte[] buf = new byte[bufsiz]; int ix = 0; int n; while((n = stm.Read(buf, ix, bufsiz - ix)) > 0) { ix += n; } men du skal nok bruge: byte[] buf = new byte[bufsiz]; int ix = 0; int n; while(ix < bufsiz) { n = stm.Read(buf, ix, bufsiz - ix); ix += n; }
08. oktober 2007 - 20:33
#4
dvs... i eksempel 2... jeg skal altså hele tiden prøve at læse resten af bufferlængden... mystisk... men der giver jo mening :) prøver lige
16. oktober 2007 - 10:41
#5
hvornår lære folk at smide et svar NÅR de svare... måske hvis man utaknemmeligt snupper sine point til sig selv... jeg ved det ik - Eksperten sux Arne... din løsning virker
16. oktober 2007 - 15:03
#6
et svar kommer her
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.