Avatar billede rust10 Nybegynder
29. marts 2004 - 15:00 Der er 13 kommentarer og
1 løsning

browser visning af et byte array

Jeg har nogle binære data i min database som tit vil være et billed, men også kan være andre forskellige type som et word dokument. Jeg vil gerne have så en person kan klikke på en knap eller noget lignende og så vises det hvis det er et billed eller noget som browseren kan behandle, men giver brugeren mulighed for at gemme filen hvis den ikke kan vises ordentligt. Lige som det virker hvis man laver et normal html link til en fil som dette:
<a href="/ers/test.jpg">test</a>

Lige nu har vi sådan her:

private void Button1_Click(object sender, System.EventArgs e)
{
    WebServGateWay ws = new WebServGateWay();
    XmlDocument xmldoc = ws.getBugAttachment(11);
    XmlNodeList xnl = xmldoc.GetElementsByTagName("BugAttachment");
    XmlElement xe = (XmlElement)xnl.Item(0);
    int size = Convert.FromBase64String(xe.InnerText).Length;
    byte[] bugAttach = new Byte[size];
    bugAttach=Convert.FromBase64String(xe.InnerText);
    Response.BinaryWrite(bugAttach);
}

Filen byte arrayet hentes over en webservice så er derfor vi lige konvertere det tilbage til byte[] fra base64.

Metoden virker sådan set fint når det bare er et billed, så bliver det vist fint. Men når man f.eks. henter et word dokument i stedet for, så viser den bare en masse flot binær data i browseren, i stedet for at tilbyde at gemme det på din disk. Er der en måde at få det til at opfører sig som et normalt html link?
Avatar billede dgivoni Nybegynder
29. marts 2004 - 15:08 #1
Saa vidt jeg ved reagerer browseren (IE) paa baggrund af dokument-typen, dvs. den extension det har. En download-boks kommer kun frem, hvis browseren ikke ved hvilken type det er.
Avatar billede rust10 Nybegynder
29. marts 2004 - 15:18 #2
Det vil så betyde at vi skal have skrevet filen ned på disken først?
Avatar billede dgivoni Nybegynder
29. marts 2004 - 15:27 #3
Nej, ikke noedvendigvis, men det link som brugeren klikker paa, er noedt til at have den rigtige extension.
Avatar billede dgivoni Nybegynder
29. marts 2004 - 15:29 #4
hmm, naar jeg taenker naermere over det, saa kan det jo ikke passe
Avatar billede dgivoni Nybegynder
29. marts 2004 - 15:32 #5
Du kan goere det dynamisk (uafhaengig af file-extension) ved at bruge Response.ContentType
Avatar billede rust10 Nybegynder
29. marts 2004 - 15:34 #6
Hmm, det ka jeg ikke lige gennemskue hvordan man skulle kunne gøre, muligt at du kan vise et eksempel? Lige nu har jeg ikke filnavne med nede i min database, men det kunne jeg sagtens tilføje hvis det er nødvændigt. Men jeg vil helst ikke ende i noget med at jeg temporært skal gemme filer et andet sted på serveren, når folk skal hente dem.
Jeg er også tilfreds hvis brugeren kun har mulighed for at gemme den fil, og at den så ikke bliver vist i browseren selv om det er et billed. Men vil jo gerne have det vist hvis man kan.
Avatar billede dgivoni Nybegynder
29. marts 2004 - 15:35 #7
Response.ContentType = "application/doc"
Avatar billede rust10 Nybegynder
29. marts 2004 - 15:36 #8
hmm, vi er der henne af med det der ContentType, skal bare lige gennemskue hvordan jeg bruger den
Avatar billede dgivoni Nybegynder
29. marts 2004 - 15:37 #9
Jeg vil tro at det skulle vaere nok at saette den rigtige contenttype ind foer du kalder Response.BinaryWrite. Dvs. at du i databasen er noedt til at gemme hvilke type binaere data det er.
Avatar billede rust10 Nybegynder
29. marts 2004 - 15:55 #10
Når jeg tester med et jpg billed og har skrevet:
Response.ContentType = "test.jpg";
Response.BinaryWrite(bugAttach);

Så bliver billedet vist fint når jeg bruger mozilla firefox som browser, men i IE vil den gemme det som "WebForm1.aspx". Hvilket kan omdøbes efter det er gemt og så bliver vist som billed.

Misforstår jeg brugen af ContentType?
Avatar billede dgivoni Nybegynder
29. marts 2004 - 16:11 #11
Ja, der er nogle faste vaerdier ContentType kan saettes til:
F.eks.:
text/html
text/xml
image/jpeg
etc.
Avatar billede rust10 Nybegynder
29. marts 2004 - 16:37 #12
Gør dette nu:

Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition","inline;filename=file.pdf");
Response.BinaryWrite(bugAttach);
Response.End();

og det ser ud til at virke
Avatar billede rust10 Nybegynder
01. april 2004 - 15:02 #13
kom med et svar så du kan få points
Avatar billede dgivoni Nybegynder
01. april 2004 - 15:23 #14
tak :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester