nordanMedlem sedan juni 2000929 inlägg
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
print "Content-Type: application/octet-stream\n";
print "Content-Disposition: attachment; filename=filen.pdf\n\n";
------------------
/nordan
[Redigerat av nordan den 25 okt 2001]
JojoxxMedlem sedan juni 20004 306 inlägg
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.
------------------
/ J
nordanMedlem sedan juni 2000929 inlägg
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
$test = "testar.pdf";
if($val eq "laddaner"){
print "Content-Type: application/octet-stream\n";
print "Content-Disposition: attachment; filename=$test\n\n";
}
if($val eq "kollawebb"){
print "Location: $test\n\n";
}
else{
print "Content-type: text/html\n\n";
print "Fel på sidan";
}
------------------
/nordan
nordanMedlem sedan juni 2000929 inlägg
Är det så att jag bara lägger till ett filnamn med koden ovan :q
Om det är så
Hur gör jag för att få fram sökvägen så att filen laddas ner :q
------------------
/nordan
Peter_BMedlem sedan apr. 2000595 inlägg
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";
}
------------------
PeterSign v 2.3.36
nordanMedlem sedan juni 2000929 inlägg
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?
------------------
/nordan
JojoxxMedlem sedan juni 20004 306 inlägg
Men är det ingen som har lite exempelkod som man kan få se på?
Det enda som saknas i kodexemplet ovanför är att läsa in filen och printa den. Det kan se ut så här:
open (INDATA,$path_to_file.'/'.$test});
binmode INDATA; binmode STDOUT;
while(read(INDATA,$filedata,1024)){ print $filedata; }
close(INDATA);
(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.
------------------
/ J
nordanMedlem sedan juni 2000929 inlägg
hmmm :q
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.
Någon som kan detta :q
$katalog = "test.pdf";
$filen = "test.pdf";
if($val eq "laddaner"){
&lagra;
&skickamail;
print "Content-Type: application/pdf\n";
print "Content-Disposition: attachment; filename=$katalog\n\n";
open (INDATA,$filen.'/'.$katalog);
binmode INDATA; binmode STDOUT;
while(read(INDATA,$filedata,4789)){ print $filedata; }
close(INDATA);
}
elsif($val eq "kollawebb"){
print "Location: $filen\n\n";
}
else{
print "Content-type: text/html\n\n";
print "Fel på sidan";
}
------------------
/nordan
JojoxxMedlem sedan juni 20004 306 inlägg
print "Content-Type: application/pdf\n";
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.
while(read(INDATA,$filedata,4789)){ print $filedata; }
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)
------------------
/ J
nordanMedlem sedan juni 2000929 inlägg
hmmm
Jag får det inte att funka iaf??
Vad är det för fel nu då?
$katalog = "test.pdf";
$filen = "http://localhost/Scripts";
if($val eq "laddaner"){
$gjort = "laddat ner";
&lagra;
&skickamail;
print "Content-Type: application/octet-stream\n";
print "Content-Disposition: attachment; filename=$katalog\n\n";
open (INDATA,$filen.'/'.$katalog);
binmode INDATA; binmode STDOUT;
while(read(INDATA,$filedata,1024)){ print $filedata; }
close(INDATA);
}
elsif($val eq "kollawebb"){
$gjort = "kollat";
&lagra;
&skickamail;
print "Location: $filen\n\n";
}
else{
print "Content-type: text/html\n\n";
print "Fel på sidan";
}
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 :q
Ser ni nå fel i koden eller nått som skall läggas till?
------------------
/nordan
[Redigerat av nordan den 01 nov 2001]
JojoxxMedlem sedan juni 20004 306 inlägg
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?
Var ser du det?
------------------
/ J
nordanMedlem sedan juni 2000929 inlägg
Oki Nu har jag lagt in sökvägen vad jag tror är rätt men det funkar inte iaf :q
$katalog = "test.pdf";
$filen = "C:\Inetpub\wwwroot\test";
if($val eq "laddaner"){
$gjort = "laddat ner";
&lagra;
&skickamail;
print "Content-Type: application/octet-stream\n";
print "Content-Disposition: attachment; filename=$katalog\n\n";
open (INDATA,$filen.'/'.$katalog);
binmode INDATA; binmode STDOUT;
while(read(INDATA,$filedata,1024)){ print $filedata; }
close(INDATA);
}
elsif($val eq "kollawebb"){
$gjort = "kollat";
&lagra;
&skickamail;
print "Location: $filen\n\n";
}
else{
print "Content-type: text/html\n\n";
print "Fel på sidan";
}
Jojoxx kod:
open (INDATA,$path_to_file.'/'.$test[b]}[/b]);
binmode INDATA; binmode STDOUT;
while(read(INDATA,$filedata,1024)){ print $filedata; }
close(INDATA);
Måsvingen är markerad med blått
------------------
/nordan
[Redigerat av nordan den 01 nov 2001]
CssonMedlem sedan feb. 2000314 inlägg
Jag skulle byta håll på slashen:
open (INDATA,$filen.'\'.$katalog);
/Csson
------------------
Erimax.com
Cykelsemester
[Redigerat av Csson den 01 nov 2001]
JojoxxMedlem sedan juni 20004 306 inlägg
$filen = "C:\Inetpub\wwwroot\test";
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)
------------------
/ J
nordanMedlem sedan juni 2000929 inlägg
Tack Jojoxx! Funkar fin fint att ladda hem filen nu :D
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å :q
Jag har testat flera sökvägar till den filen men ingen funkar när jag kör cgi scriptet :q
Men skriver jag samma sökväg i urlen så funkar det? hmm
------------------
/nordan
[Redigerat av nordan den 05 nov 2001]
Peter_BMedlem sedan apr. 2000595 inlägg
$filen innehåller väl en lokal sökväg? ändra så att du skriver ut en url så ska Location funka bra.
------------------
PeterSign v 2.3.36