Avatar billede rune.rasmussen Nybegynder
19. maj 2004 - 13:23 Der er 30 kommentarer og
2 løsninger

Download fil istedet for åbn

Situationen er følgende:

Jeg linker til nogle videofiler fra min hjemmeside.
filerne ligger på en anden server end min.
da det er videofiler vil jeg gerne have at når folk klikker på linket så bliver filen downloadet og ikke åbnet (og forsøgt streamet i mediaplayer)

Jeg har fundet asp scripts der får filen til at blive downloadet i stedet for åbnet, men kun så længe filen ligger på samme server.

Har du en løsning giver jeg point for den :-)
Avatar billede krogstrup Nybegynder
19. maj 2004 - 13:31 #1
nysgerrig - kunne du vise eller henvise til det script du har fundet der gør at filen downloades i stedet for vises ?
Avatar billede rune.rasmussen Nybegynder
19. maj 2004 - 13:34 #2
Skal lige finde det igen så :-)
Avatar billede overchord Nybegynder
19. maj 2004 - 13:37 #3
Det ville faktisk vaere bedre at kunne linke til en side hvor videofilerne ligger, da denne slags deep-linking teknikker ikke ligefrem er oenskvaerdige.
Avatar billede overchord Nybegynder
19. maj 2004 - 13:37 #4
med en sde mener jeg download links paa samme server... ;-)
Avatar billede rune.rasmussen Nybegynder
19. maj 2004 - 13:46 #5
overchord>> det ville selvfølgelig være nemmere, problemet er at den server der hoster mine videofiler ikke er min egen og jeg faktisk ikke engang ved om den kan køre ASP (men det kan jeg nok finde ud af...)

Derfor ville jeg i første omgang holde videofilserveren fri for html/asp dokumenter.

Men spørgsmålet er om det kan lade sig gøre...
Avatar billede ellebaek Nybegynder
19. maj 2004 - 18:21 #6
<%
Response.Expires = -1

Dim filename
Dim shortfn

shortfn = request.querystring("filnavn")
filename = server.mappath("filer/" & shortfn)

Set objStream = Server.CreateObject("ADODB.Stream")
  objStream.Open
  Const adTypeBinary = 1
  objStream.Type = adTypeBinary
  objStream.LoadFromFile Replace(filename,"/","\") 
  Response.AddHeader "Content-Disposition", "attachment;filename=" & shortfn
  Select Case right(filename,3)
          Case "asf"
              ContentType = "video/x-ms-asf"
          Case "avi"
              ContentType = "video/avi"
          Case "doc"
              ContentType = "application/msword"
          Case "zip"
              ContentType = "application/zip"
          Case "xls"
              ContentType = "application/vnd.ms-excel"
          Case "gif"
              ContentType = "image/gif"
          Case "jpg", "jpeg"
              ContentType = "image/jpeg"
          Case "wav"
              ContentType = "audio/wav"
          Case "mp3"
              ContentType = "audio/mpeg3"
          Case "mpg", "mpeg"
              ContentType = "video/mpeg"
          Case "rtf"
              ContentType = "application/rtf"
          Case "htm", "html"
              ContentType = "text/html"
          Case "asp"
              ContentType = "text/asp"
          Case Else
              'Handle All Other Files
              ContentType = "application/octet-stream"
  End Select

  Response.ContentType = ContentType

 
  Response.BinaryWrite objStream.Read
%>

Her er noget..
Det er det jeg selv benytter.
Har fået det igennem der her spg..
http://www.eksperten.dk/spm/377238
Avatar billede ellebaek Nybegynder
19. maj 2004 - 18:22 #7
Lige lidt forklaring..

shortfn = request.querystring("filnavn")
filename = server.mappath("filer/" & shortfn)

de her 2 linier skal rettes lidt til..
Som det er nu kalder du siden med fx:
download.asp?filnavn=test.mpg

det vil altså sige at filen test.mpg skal downloades..
Filen skal så ligge i mappen filer/ som det ses af anden linie..
Det er den du skal rette til, så den passer med hvor dine filer ligger placeret.

Håber det kan bruges.
Avatar billede rune.rasmussen Nybegynder
19. maj 2004 - 20:03 #8
det ser lidt anderledes ud end det jeg prøvede.
jeg tester lige...
Avatar billede rune.rasmussen Nybegynder
19. maj 2004 - 20:12 #9
næ, det var det samme.
det virker fint så længe videofilen ligger på samme server som asp filen køres fra, men så snart man henviser til en anden server, så får man en fejl om at den ikke kan åbne filen.

P.S
serveren der hoster videofilerne kan ikke køre asp
Avatar billede ellebaek Nybegynder
19. maj 2004 - 21:49 #10
hmm...

Hvordan kalder du scriptet med den anden fil..?
Avatar billede rune.rasmussen Nybegynder
24. maj 2004 - 08:16 #11
stadig med download.asp?filnavn=test.mpg
og så ændret i scriptet til: filename = ("http://www.minserver.dk/" & shortfn)

og jeg havde set og ændret i denne linje: objStream.LoadFromFile Replace(filename,"/","\")
Avatar billede ellebaek Nybegynder
24. maj 2004 - 10:49 #12
hvis filen til download ligger på en af dine andre servere, så lig filen download.asp på den samme server. så den fil og filen der skal downloades ligger på samme server..

Så kan du i stedet linke til download.asp som:
http://www.minserver.dk/download.asp?filnavn=test.mpg
Avatar billede rune.rasmussen Nybegynder
24. maj 2004 - 10:52 #13
det var det problem jeg oprindeligt spurgte om, nemlig om jeg kunne have scriptet på en server og videofilerne på en anden.

problemet er at den server der hoster videofilerne ikke er min og den understøtter ikke asp.
Avatar billede ellebaek Nybegynder
24. maj 2004 - 11:10 #14
nå ja ;-)

Havde jeg allerede glemt igen..
men det kan du ikke gøre på den måde, da du benytter en direkte stream.
Det vil altså sige at streamen skal kunne finde filen på sin egen server..

Det er ligesom at du ikke kan hente information direkte fra en database der ikke ligger på din egen server..
Avatar billede ellebaek Nybegynder
24. maj 2004 - 11:12 #15
hmm..
hvad er det du har ændret i denne linie:
objStream.LoadFromFile Replace(filename,"/","\")
Avatar billede rune.rasmussen Nybegynder
24. maj 2004 - 11:17 #16
jeg prøvede at ændre Replace(filename,"/","\") til bare filename, så den ikke ændrede / til \

anyway, tak for svaret. det anede mig at det ikke ville virke, men måtte lige have det bekræftet...
Avatar billede rune.rasmussen Nybegynder
24. maj 2004 - 11:19 #17
jeg giver lidt point for scriptet som trods alt kan bruges, hvis jeg en dag selv kan hoste mine filer :-)
Avatar billede ellebaek Nybegynder
24. maj 2004 - 11:20 #18
;-)

Tænkte nok det var det du havde rettet..
Du har ingen muligheder for at ligge filer ind på den anden server..?
Avatar billede rune.rasmussen Nybegynder
24. maj 2004 - 11:23 #19
jo, jeg kan godt uploade andre filer (selvom det ikke er meningen), men der er ikke understøttelse for ASP på den server.
Avatar billede ellebaek Nybegynder
24. maj 2004 - 11:26 #20
Nej, understøtter den fx. php ?
Avatar billede rune.rasmussen Nybegynder
24. maj 2004 - 11:29 #21
ved ikke, jeg kan ikke php og har derfor ikke umiddelbart noget at teste med
Avatar billede ellebaek Nybegynder
24. maj 2004 - 11:30 #22
jeg finder lige et script du kan teste med..
Avatar billede ellebaek Nybegynder
24. maj 2004 - 11:33 #23
<?php
$file = $_GET['file'];
$path = "/";

if(file_exists($path)){
  header("Content-Type: application/xyz");
  header("Content-Transfer-Encoding: binary");
  header("Content-Length: ".filesize($path));
  header("Content-Disposition: attachment; filename=$file");
  readfile($path);
}else{
  echo "Fil ikke fundet";
}

?>


Prøv det her, og kald det fx. download.php4 og så kald filen med:
download.php4?file=test.mpg det tror jeg virker, og hvis du har php, så burde det virke på den anden server..
Avatar billede ellebaek Nybegynder
24. maj 2004 - 11:33 #24
nej.. hov.. 2 sek.
Avatar billede ellebaek Nybegynder
24. maj 2004 - 11:35 #25
<?php
$file = $_GET['file'];
$path = "/$file";

if(file_exists($path)){
  header("Content-Type: application/xyz");
  header("Content-Transfer-Encoding: binary");
  header("Content-Length: ".filesize($path));
  header("Content-Disposition: attachment; filename=$file");
  readfile($path);
}else{
  echo "Fil ikke fundet";
}

?>

Sådan her..
Så kan du rette linien: $path = "/$file";
til noget andet hvis filen ikke ligger i roden og hedder det som du kalder filen med som argument.
Avatar billede rune.rasmussen Nybegynder
24. maj 2004 - 11:37 #26
Perfekt, det vil jeg få prøvet hurtigst muligt.
(ftp passwordet har jeg desværre derhjemme, så jeg kan først teste efter arbejde)
Avatar billede ellebaek Nybegynder
24. maj 2004 - 11:50 #27
hehe...

Du kan bare vende tilbage når nu har testet det.
Avatar billede rune.rasmussen Nybegynder
24. maj 2004 - 11:51 #28
selvfølgelig :-)
Avatar billede rune.rasmussen Nybegynder
25. maj 2004 - 08:40 #29
Desværre :-(
Serveren understøtter heller ikke php.
Avatar billede ellebaek Nybegynder
25. maj 2004 - 10:47 #30
hmm...

understøtter den noget :-)

Ellers så skriv til brugeren at han skal højreklikke og vælge gem som..
Det er da vidst så den eneste løsning.
Avatar billede rune.rasmussen Nybegynder
25. maj 2004 - 11:10 #31
<citat>Ellers så skriv til brugeren at han skal højreklikke og vælge gem som..</citat>

Se det har jeg allerede gjort ;-)

Tak for indsatsen :-)
Avatar billede ellebaek Nybegynder
25. maj 2004 - 20:58 #32
anytime ;-)
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
Kurser inden for grundlæggende programmering

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