WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Hur få fil nedladdningsbar? (https://www.wn.se/forum/showthread.php?t=14085)

Milad 2006-05-14 23:25

Om jag lägger en mp3-fil på servern och vill att besökarna på min sida skall kunna klicka på länken som då ger en liten ruta där man får välja om man vill ladda ner filen eller öppna den.
Om jag skriver som en vanlig länk med <a href="song.mp3"> öppnas ju den direkt i fönstret, men det vill jag ju inte utan vill att man skall få frågan om man vill ladda ner.

Hur gör man det?

FredrikMH 2006-05-15 00:46

I PHP kan du göra något hitåt. Jag har inte testat koden men den bör fungera
Kod:


if(isset($_GET['filename'])) {
 $filename = $_GET['filename'];

 header("Content-Type: audio/mpeg");
 header("Content-Disposition: attachment; filename=\"$filename\"");
 header("Content-Length: " . filesize($filename));
 header("Expires: 0");

 $fileHandle = @fopen($filename, 'rb');

 do
 {
  $data = fread($fileHandle, 4096);
  echo $data;
 }while ($data != "");

 fclose($fileHandle);
 exit();
}

Det är möjligt att det går att göra på annat sätt.

Milad 2006-05-15 09:43

Citat:

Originally posted by FredrikMH@May 15 2006, 00:46
I PHP kan du göra något hitåt. Jag har inte testat koden men den bör fungera
Kod:

ifisset_GETfilename {
 filename = _GETfilename;
 headerContent-Type audio/mpeg;
 headerContent-Disposition attachment; filename=filename;
 headerContent-Length . filesizefilename;
 headerExpires 0;
 fileHandle = @fopenfilename, rb;
 do
 {
 data = freadfileHandle, 4096;
 echo data;
 }while data =;
 fclosefileHandle;
 exit;
}

Det är möjligt att det går att göra på annat sätt.

:( kan inte php. Jag jobbar med asp :)

2cool4school 2006-05-15 10:23

Skriv: Höger klicka och välj "Spara som" för att ladda ner filen ;););)

Staffconsulting 2006-05-15 10:36

Har inte lösningen åt dig för jag använder en komponent men du kanske kan fila ihop en kod med hjälp utav detta :

vFileName = Request.Querystring("filnamn")

If InStr(Request.Servervariables ("HTTP_USER_AGENT"),"5.5") > 0 Then
Response.Addheader "Content-Disposition", "inline; filename=" & vFileName
Else
Response.Addheader "Content-Disposition", "attachment; filename=" & vFileName
End If

' Filsystemet laddar ner filen :
set oFS = Server.CreateObject("SoftArtisans.FileManager")
set oF = oFS.GetFile(vFullPath)
Response.AddHeader "Content-Length", oF.Size
set oF = nothing
set oFS = nothing
' ** Fixar så nerladdning i IE 5.5 fungerar : **
If InStr(Request.Servervariables ("HTTP_USER_AGENT"),"5.5") > 0 Then
Response.ContentType = "application/download"
Else
Response.ContentType = "application/x-msdownload"
End If

Response.CacheControl = "public"

Set oDownload = Server.CreateObject("SoftArtisans.FileUp")

oDownload.TransferFile vFullPath

Robert 2006-05-15 10:39

GÖr mp3'an åtkomlig via en asp-fil istället så har du kontroll över de headers som skickas tillbaka till webläsaren.

Låt asp-koden läsa in mp3an och sätt följande i ditt response objekt:
* contenttype ska vara "application/octet-stream"
* Lägg till en header (addHeader?) som heter "Content-Disposition". Dess värde skall vara "attachment; filename=här_skriver_du_in_det_filnamn_som_ska_bli _i_webläsarens_spara_dialog"
* Skicka tillbaka mp3 filen som response (response.binary?)

Observera att jag inte kodat asp på några år så HUR du gör detta vet jag inte, men jag vet att det fungerar om du sätter ovanstående i headern.


[Edit:StaffConsulting hann före] :)

kullervo 2006-05-15 10:39

För att sammanfatta FredrikMHs långa exempel behöver du skicka headern Content-Disposition. T.ex:
Content-Disposition: attachment; filename=filnamn.mp3

Det är också klokt att säga åt webbläsaren att mime-typen är application/octet-stream. Det gör du med följande header:
Content-type: application/octet-stream

Robert 2006-05-15 10:41

Shit, Kullervo också. Serviceandan är på top så här på måndagsmorgonen. :D


Alla tider är GMT +2. Klockan är nu 03:25.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson