webForumDet fria alternativet

ASP.NET (VB.NET) - Ladda ned filer utanför webbroten

Programmeringur Script - Övrigt

0 svar · 3 790 visningar · startad av Pace

PaceMedlem sedan juni 20019 024 inlägg
#1

Denna klass låter dig ladda ned filer utanför webbroten. Inga begränsningar finns på filstorlek eller antalet nedladdningar.

Används på följande vis:

HttpFile.SecureFileDownload("c:\filnamn.txt")

Eller om du vill specifiera ett eget filnamn som visas för klienten:

HttpFile.SecureFileDownload("c:\filnamn.txt", "nyttfilnamn.txt")

Imports System
Imports System.IO
Imports System.Web
Imports System.Web.UI

Namespace BackendMedia.Web

	[blue]''' <summary>
	''' Hanterar http-anslutningar till lokala filer på webbservern.
	''' </summary>[/blue]
	Public Class HttpFile
	
	
		[blue]''' <summary>
		''' Laddar ned fil till klienten.
		''' </summary>
		''' <remarks>
		''' Filen skickas i ContentType <c>application/octet-stream</c>, vilket tvingar klienten att ladda ned filen
		''' i stället för att låta användarens inställningar välja om den ska laddas ned eller öppnas direkt.
		''' </remarks>
		''' <param name="SourceFile">
		''' Fullständig sökväg till fil som ska laddas ned. Exempelvis <c>c:\temp\file.txt</c>.
		''' </param>[/blue]
		Public Shared Sub SecureFileDownload(ByVal SourceFile As String)
			[blue]' Välj rätt namn på filen.[/blue]
			Dim fi As FileInfo = New FileInfo(SourceFile)
			Dim FileName As String = fi.Name
			
			MyBase.SecureFileDownload(SourceFile, FileName)
		End Sub
		
		[blue]''' <summary>
		''' Laddar ned fil till klienten.
		''' </summary>
		''' <remarks>
		''' Filen skickas i ContentType <c>application/octet-stream</c>, vilket tvingar klienten att ladda ned filen
		''' i stället för att låta användarens inställningar välja om den ska laddas ned eller öppnas direkt.
		''' </remarks>
		''' <param name="SourceFile">
		''' Fullständig sökväg till fil som ska laddas ned. Exempelvis <c>c:\temp\file.txt</c>.
		''' </param>
		''' <param name="FileName">
		''' Namn på filen som ska skicka till klienten. Ett annorlunda namn kan exempelvis anges om
		''' originalfilen heter <c>original.txt</c>, men kan laddas ned som <c>annat-filnamn.txt</c>.
		''' </param>[/blue]
		Public Shared Sub SecureFileDownload(ByVal SourceFile As String, ByVal FileName As String)				
			Dim oFileStream As FileStream
			Dim lFileSize As long, lStartpos = 0
			
			[blue]' Fånga eventuella fel.[/blue]
			Try
				oFileStream = New FileStream(SourceFile, FileMode.Open)
			Catch ex As FileNotFoundException
				HttpContext.Current.Response.Clear()
				HttpContext.Current.Response.Write("Filen kunde inte hittas.")
				HttpContext.Current.Response.End()
				Return
			Catch Ex As Exception 
				HttpContext.Current.Response.Clear()
				HttpContext.Current.Response.Write(String.Format("Ett fel uppstod: {0}", ex.Message))
				HttpContext.Current.Response.End()
				Return
			End Try
			
			[blue]' Läs in filens innehåll.[/blue]
			lFileSize = oFileStream.Length
			Dim bBuffer(cInt(lFileSize)) As Byte
			oFileStream.Read(bBuffer, 0, cType(lFileSize, Integer))
			oFileStream.Close()
			
			[blue]' Slanga ut filen.[/blue]
			With HttpContext.Current.Response
				.ClearContent()
				.AddHeader("Content-Type", "application/octet-stream")
				.AddHeader("Content-Disposition", "attachment; filename=""" & FileName & """")
				.BinaryWrite(bBuffer)
			End With
			
			[blue]' Viktigt att stänga filströmmen, annars låses den av processen.[/blue]
			oFileStream.Close()
		End Sub
				
	End Class

End Namespace
123 ms totalt · 3 externa anrop · v20260731065814-full.29ac60f6
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
120 ms — hämta tråd, inlägg och bilagor (db)