Just nu i M3-nätverket
Jump to content

Disabla downloadprogram


JUTE

Recommended Posts

Hej !!

Har lagt upp några mp3:or/streamade till 128 kb på min hemsida, men jag kan inte klura ut hur man gör för att folks dowloadprogram såsom GetRight å andra startar och vill ladda ner filen istället för att bara spela av den, finns det nån som kan förklara för mig hur man gör detta

Link to comment
Share on other sites

Hej!

 

Jag tror inte det finns något enkelt sätt i HTML/Javascript att göra det du vill åstadkomma, men nedanstående kod funkar om du kan använda ASP sidor:

 

' strFileName = Physical path to file
' strDownloadFileName = filename to be shown in file dialog prompt
'
' example: 
' DownloadFile "C:\Music\Whatever.MP3", "test.mp3"
'
Function DownloadFile(ByVal strFileName, ByVal strDownloadFileName)
DownloadFile = false

Dim ads, fso, f, ft
Dim lngFileSize

With Response
	.Clear

	Set fso = Server.CreateObject("Scripting.FileSystemObject")
	If not fso.FileExists(strFileName) then
		.Write "<h1>Fel: </h1><font color='#485e9e'>" & strFileName & "</font> finns inte<p>"
		Show_Error (Err)
	End if

	On Error Resume Next

	Set f = fso.GetFile(strFileName)
	If Err then Show_Error(Err)
	lngFileSize = f.size
	Set f = Nothing
	Set fso = Nothing

	' Create stream
	Set ads = Server.CreateObject("ADODB.Stream")
	ads.Open
	ads.Type = 1
	ads.LoadFromFile(strFileName)
	If Err then Show_Error(Err)

	' Set headers for download
	.AddHeader "Content-Disposition", _
		"attachment; filename=" & strDownloadFileName
	.AddHeader "Content-Length", lngFileSize
	.Charset = "UTF-8"
	.ContentType = "application/octet-stream"

	' Write the stream to the response object
	.BinaryWrite ads.Read
	.Flush
End With

ads.Close
Set ads = Nothing
DownloadFile = true

End Function	

Sub Show_Error(objErr)
Response.Write ("<h1>Fel: </h1><font color='#485e9e'>" & _
Hex(objErr.Number) & ":" & objErr.Description & "</font><p>")
'If objErr.Number <> 0 then Response.End
'objErr.Clear

End Sub

 

Observera att i vissa tidigare browsers måste man högerklicka och använda "Save as" på länken för att det skall funka.

 

Tänk även på att man kan göra det hela säkrare/mer flexibelt genom att t ex ge ett fileid till mp3-filen och sedan hämta detta från en databas, som innehåller sökvägen. Alternativt kan man hämta filen direkt från databasen. Man använder sedan t ex länken "download.asp?id=1111" för att ladda ner filen i browsern.

 

 

Mvh

 

Jimmy

 

 

 

Link to comment
Share on other sites

 

Tack skall du ha Jimmy,

detta är nåt jag får prova, är lite ny på asp, kan inte så mycket om det, men servern som jag har hemsidan på kör windos nt och där skall man kunna köra asp, bara en fråga till skall jag byta ut nån fil eller inserta koden som du skrivit i HTML documentet, jag har alltså som det är nu en meny där man kan välja olika mp3:or, men då måste jag väl göra en loop av nåt slag.

 

Link to comment
Share on other sites

 

Hej!

 

Först måste du döpa om din html fil, så att den får ändelsen ".asp". Du kan så klart hårdkoda länkarna men då förlorar man litet av poängen.

 

Jag har i tidigare forum skickat in kod som loopar igenom ett bibliotek (med eller utan underbibliotek), och sedan visar t ex en dropdown alt länkar. I ditt fall skulle det vara bra med underbibliotek, då skulle du kunna kategorisera filerna i t ex Pop, Rock, etc. Säg till så kan jag leta upp koden eller sök i ASP-forumet efter mina inlägg. Jag meckar till en kod som funkar för dina mp3:or, men tar väl en 20-30 minuter.

 

Det finns förresten en ASP-skola för nybörjare på idg's hemsida, men jag har inte kollat på den och kan avgöra om den är bra eller inte.

 

Mvh

 

Jimmy

 

 

Link to comment
Share on other sites

 

Hej Jimmy !!

Tack skall du ha, jag behöver all hjälp jag kan få, du kan titta på www.matslundgren.net där har jag min hemsida, den är alltså under utveckling och skall inte se ut så, mest för att testa mig fram

 

Mvh

Mats

 

Link to comment
Share on other sites

Hej!

 

Ok. Klistra in nedanstående kod i en asp fil. Ändra sedan konstanten "vdpath" till ett virtual directory som pekar på dina musikfiler.

 

Koden kräver att filerna är organiserade i underbibliotek, t ex Artist, Album etc.

 

Observera att om du kör IE, så måste man stänga av öppna mediafiler i media bar annars spelar IE upp filen. Alternativet är att högerklicka på filen och köra "Save as".

 

Jag är medveten om att nedanstående inte är lätt för en nybörjare att sätta sig in i, men fråga gärna om det är något du undrar över.

 

Nedanstående är inte helt perfekt (kräver lite prestanda just nu om det finns många filer), men det är en start.

 

<%@ Language=VBScript %>
<% 
Option Explicit 

Const vdPath = "/music_files"
Dim strDownloadURL, strDownloadFileName
Dim intPos
strDownloadURL = js_decode_URI(Request.QueryString)

If Len(strDownloadURL) > 0 then
If InStr(strDownloadURL, vdPath) > 0 then ' for security only
	intPos = InStrRev(strDownloadURL,"/")
	If intPos > 0 then
		strDownloadFileName = Mid(strDownloadURL,intPos + 1)
	Else
		strDownloadFileName = strDownloadURL
	End If
	DownloadFile Server.MapPath(strDownloadURL), strDownloadFileName
	Response.End
End If
End If

Function TraverseFolderTree(strFolder, intTreeLevel)
TraverseFolderTree = False
Dim objFolder, objSubFolders, objTempFolder
Dim f, file
Dim strArgument, strFileName, strExt, strIndent, strURL
If Not Response.IsClientConnected then ' break if cancel button is hit in browser
	Response.Flush
	Response.End
End If
Set objFolder = objFileSystem.GetFolder ( strFolder )
Set f = objFolder.Files	
strIndent = String(intTreeLevel * 8, chr(160))
If intTreeLevel > 1 then 
	Response.Write (objFolder.name & "<br>")		
	' can also use select to show different headings for each tree level
End If
For each file in f
	With file
		strFileName = .name
		strExt = LCase(objFileSystem.GetExtensionName(strFileName))
		If Left(strExt,2) = "mp" then 
			strURL = makeVDName(strFolder & "\" & strFileName)
			Response.Write (strIndent & _
				 "<a href=""show_tree.asp?" & strURL & """>" & strFileName & "</a><br>")
		End If
	End With
Next
Response.Write ("<hr size=1 noshade size=1 color=black>")
Set f = Nothing

' Recursion takes place here
' Get the list of subfolders
Set objSubFolders = objFolder.SubFolders
' If any "subfolders exist", the function is repeated for them too!
If objSubFolders.Count > 0 Then
	For Each objTempFolder in objSubFolders
		strArgument = strFolder & "\" & objTempFolder.Name
		If InStr(objTempFolder.name,"_vti_") = 0 then ' skip frontpage extensions
			TraverseFolderTree strArgument, intTreeLevel + 1
		End If
	Next
End If
Set objSubFolders = Nothing
Set objFolder = Nothing
TraverseFolderTree = true
End Function

Function makeVDName(strFilePath)

Dim strTemp
Dim intPos
intPos = InStr(strFilePath, LCase(Server.MapPath(vdPath)))
If intPos > 0 then
	strTemp = Mid(strFilePath, intPos)
	strTemp = Replace(strTemp, LCase(Server.MapPath(vdPath)), vdPath)
	strTemp = Replace(strTemp, "\", "/")
Else
	strTemp = Replace(strFilePath, "\", "/")
End If
makeVDName = strTemp

End Function


Function DownloadFile(ByVal strFileName, ByVal strDownloadFileName)
DownloadFile = false

Dim ads, fso, f, ft
Dim lngFileSize

With Response
	.Clear

	Set fso = Server.CreateObject("Scripting.FileSystemObject")
	If not fso.FileExists(strFileName) then
		.Write "<h1>Fel: </h1><font color='#485e9e'>" & strFileName & "</font> finns inte<p>"
		Show_Error (Err)
	End if

	On Error Resume Next

	Set f = fso.GetFile(strFileName)
	If Err then Show_Error(Err)
	lngFileSize = f.size
	Set f = Nothing
	Set fso = Nothing

	' Create stream
	Set ads = Server.CreateObject("ADODB.Stream")
	ads.Open
	ads.Type = 1
	ads.LoadFromFile(strFileName)
	If Err then Show_Error(Err)

	' Set headers for download
	.AddHeader "Content-Disposition", _
		"attachment; filename=" & strDownloadFileName
	.AddHeader "Content-Length", lngFileSize
	.Charset = "UTF-8"
	.ContentType = "application/octet-stream"

	' Write the stream to the response object
	.BinaryWrite ads.Read
	.Flush
End With

ads.Close
Set ads = Nothing
DownloadFile = true

End Function	

Sub Show_Error(objErr)
Response.Write ("<h1>Fel: </h1><font color='#485e9e'>" & _
Hex(objErr.Number) & ":" & objErr.Description & "</font><p>")
If objErr.Number <> 0 then Response.End ' to se error message
'objErr.Clear

End Sub

%>
<script language=jscript runat=server>

function js_decode_URI(strURL) {
	return decodeURI(strURL);
}


</script>
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
</HEAD>
<BODY>

<P>&nbsp;</P>

<%
Dim strFolder
Dim objFileSystem
Set objFileSystem = Server.CreateObject("Scripting.FileSystemObject")
strFolder = LCase(Server.MapPath(vdPath))
TraverseFolderTree strFolder, 1
Set objFileSystem = Nothing
%>

</BODY>
</HTML>

 

Mvh

 

Jimmy

 

 

Link to comment
Share on other sites

Skriv nedanstående för att någon inte skall kunna ange en sökväg utanför musikbiblioteket:

strDownloadURL = Replace(strDownloadURL,"../", "")
strDownloadURL = Replace(strDownloadURL,"..\", "")

 

Lägg ovanstående under raden:

strDownloadURL = js_decode_URI(Request.QueryString)

 

/Jimmy

 

[inlägget ändrat 2002-08-18 18:23:32 av dotgif]

Link to comment
Share on other sites

 

Jag tackar !!

men jag får det inte att funka min HTML editor säger nåt om <Head> tag is missing och <script language=jscript runat=server> vill den ändra till <script language=jscript>

 

Mvh

Mats

 

 

Link to comment
Share on other sites

använd inte editorn. Kopiera in texten i Notepad/Anteckningar och spara. Det bör funka med modernare editorer, typ frontpage 2002, dreamweaver etc.

 

 

 

 

Link to comment
Share on other sites

Hej Jimmy !!

 

Klistrade in det i anteckningar, döpte filen till index.asp men det kom bara upp ett meddelande att jag inte hade tillåtelse att visa denna sida??

 

Link to comment
Share on other sites

 

Kolla att "everyone" eller "IUSR_Maskinnamn" har läsrättighet till musikbiblioteket. Om du har antivirusprogramvara stäng av "script" block.

 

 

 

Link to comment
Share on other sites

 

Hej igen jimmy:

mp3:orna ligger på en server i sthlm som kör linux och min hemsida ligger på en server i malmö som kör windows nt,men jag fattar inte var jag ställer in "everyone" eller IUSR_Maskinnamn

 

Mvh

Mats

 

Link to comment
Share on other sites

Beklagar. Det börjar bli lite avancerat nu. Filerna måste ligga lokalt på din maskin alternativt kan man mappa en drive: till en nätverksshare om du befinner dig i samma nätverk som stockholmsservern. Detta kan göras med WScript (Lämpligtvis i global.asa filen under Application_OnStart). Annars är det tyvärr kört med denna typ av lösning.

 

/Jimmy

 

 

Link to comment
Share on other sites

 

Hej !!

Jaja , det var ett försök jag tackar så mycket för lektionen, men det hade ju varit bra om det fungerat:

 

Mvh

Mats

 

Link to comment
Share on other sites

Jo. Du kan ju alltid länka direkt till filen i stället för att gå omvägen via html-filen och asx-filen på winer, e g

 

<option value="http://www.winer.nu/~mats/hip%20to%20dip.mp3">Hip To Dip</option>

 

Det funkar i dem fall som man inte bett om att mp3 filer skall spelas i browsern, e g via IE Media Bar etc. Annars kan man alltid högerklicka på länken och spara filen.

<a href="http://www.winer.nu/~mats/hip%20to%20dip.mp3">Hip To Dip</a>

 

Häpp,

 

Jimmy

 

 

Link to comment
Share on other sites

 

Provade det, men det streamar ju inte då, vad är %20 för kod, jag e lite ny på det här så jag fattar inte riktigt

 

Mvh

Mats

 

Link to comment
Share on other sites

%20 står för mellanslag, altså istället för att skriva

"Hejsan Hoppsan" skriver man

"Hejsan%20Hoppsan"

 

Don't Underestimate The Power Of Esuk ...

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...