Hej jag vill ha så om man väljer ett alterativ i ett visst antal radioknappar
så skall man få upp dialogruten för att ladda hem en fil.
Jag har fått det att funka så att jag laddar ner filen.
Men det är så att filen är tom när jag skall titta på den.
Jag har testat med .pdf .txt och .doc
Vad är det som blir fel?
Min kod
Prova med att lagga till header-raden; Content-Length: $filesize
dar $filesize ar storleken pa filen. Forutsatt att du sedan fyller pa med det verkliga fildatat.
Jag får if sattsen att funka så att jag får dialogrutan för att ladda ner men filen blir iaf 0 k
Ett annat fel som jag ser är om jag istället för testar.pdf skriver testar.htm så lägger den in else sattsen i filen som laddas ner?
Ser ni något fel?
Och hur gör man med Content-Length: om man då har en pdf fil som är tex 4 789 kilo
jag tror du missuppfattat någonstans... nåtnting sånthär kanske?
$test = "testar.pdf";
if($val eq "laddaner"){
print "Content-Type: application/octet-stream\n";
print "Content-Disposition: attachment; filename=$test\n\n";
# här får du öppna $test, läsa in den och printa hela innehållet precis som det ser ut.
}
elsif($val eq "kollawebb"){
## elsif istället för if, eftersom else bara gäller ovanstående if .. elsif .. elsif etc.
print "Location: $test\n\n";
}
else{
print "Content-type: text/html\n\n";
print "Fel på sidan";
}
Oki
Men är det ingen som har lite exempelkod som man kan få se på?
Och går det inte att lägga in så att man bara laddar ner en pdf fil på en gång?
Typ som om man skulle högerklicka och spara det som ligger på den länken?
(binmode är bara relevant på win32-plattformar, men skadar inte att ha där hela tiden.)
Och går det inte att lägga in så att man bara laddar ner en pdf fil på en gång?
Typ som om man skulle högerklicka och spara det som ligger på den länken?
Då får du ändra mime-type listan på servern (har inget med perl att göra), men det är ingen snygg lösning. Det är trotts allt upp till användaren vad denne vill göra med filen denne plockar hem. Det du gör med scriptet är egentligen att lura webbläsaren att filen är något annat en den verkligen är.
hmmm
Nu har jag gjort detta men jag får det inte att funka iaf??
Vad är det för fel?
Kör jag detta i Netscape och skall ladda ner filen så får jag document contained no data osv...
Kollar jag på filen så funkar det.
Kör jag den i IE så går det att ladda ner den men filen innehåller inget?
Och kollar jag på den så visas inget? hmm
Skriver jag in adressen i urlen så visas pdf documentet.
Kom vi inte överens om att du skulle använda en annan mime-typ, ex. application/octet-stream"?
open (INDATA,$filen.'/'.$katalog);
Här måste du alltså ange sökvägen till filen, inte bara filnamnet 2 gånger som du gör nu. Detta bör vara en absolut sökväg till filen för att du skall kunna vara säker på att scriptet hittar den. I mitt exempel satte jag katalog-namnet i en separat variabel ifall du ville använda filnamnet till något mer. Variabeln $path_to_file skall alltså i mitt exempel vara en sökväg i stil med "/www/katalog/annankatalog". Detta är alltså en sökväg på servern.
Nono, 1024 i mitt exempel har inget med filstorleken att göra. Det är bara mängden data scriptet försöker läsa åt gången från filen, ändra tillbaks det till 1024 (1kB)
Sökvägen till mappen där filen test.pdf ligger har jag testat olika Men får det inte att funka.
Kan det vara sökvägen som jag skrivigt fel på?
Det går att titta på filen i Netscape när man kör location men ladda ner så blir det samma felmedelade somn förr?
En annan fråga om man tittar på Jojoxx exempel så är det en måsvinge som inte har någon början har den bara hoppat dit av misstag
eller skall den vara med på nått sätt
Ser ni nå fel i koden eller nått som skall läggas till?
Variaberln $filen skall vara en lokal sökväg, inte en URL!
En annan fråga om man tittar på Jojoxx exempel så är det en måsvinge som inte har någon början har den bara hoppat dit av misstag
eller skall den vara med på nått sätt?
Skall du använda ett backslash (\) inom citat-tecken måste du använda dubbla sådanna eftersom \ är ett kontroll-tecken. "\t" är ex. en tabb och "\f" en formfeed. Resultatet blir alltså;
$filen = "C:\\Inetpub\\wwwroot\\test";
Både '\' och '/' funkar under win32 så det spelar egentligen ingen roll. Jag brukar använda '/' för att vara Unix-vänlig. Använder du enkel-citat (') behöver du förresten inte "avkoda";
$filen = 'C:\Inetpub\wwwroot\test';
Sedan har du ju nu fått lite lustiga variabelnamn $filen innehåller ett katalognamn (sökväg) och $katalog innehåller ett filnamn.
Vidare kan du lägga till filstorleken i headern som vi pratade om tidigare. Börja med att läsa av filstorleken med;
$size=-s $filen.'\'.$katalog;
och skriv den i headern med;
print "Content-Length: $size\n"
(Där har du återigen kontrollkoden för radbrytning)
Tack Jojoxx! Funkar fin fint att ladda hem filen nu
Nu är det bara så att Location: inte funkar som jag vill. Det går alltså inte att se den i IE men det funkar fin fint i NN?
Någon som vet vad det kan bero på
Jag har testat flera sökvägar till den filen men ingen funkar när jag kör cgi scriptet
Men skriver jag samma sökväg i urlen så funkar det? hmm