Поиск…
Использование httpHandler (.ashx) для загрузки файла из определенного места
Создайте новый httpHandler внутри вашего проекта ASP.NET. Примените следующий код (VB) к файлу обработчика:
Public Class AttachmentDownload
Implements System.Web.IHttpHandler
Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
' pass an ID through the query string to append a unique identifer to your downloadable fileName
Dim fileUniqueId As Integer = CInt(context.Request.QueryString("id"))
' file path could also be something like "C:\FolderName\FilesForUserToDownload
Dim filePath As String = "\\ServerName\FolderName\FilesForUserToDownload"
Dim fileName As String = "UserWillDownloadThisFile_" & fileUniqueId
Dim fullFilePath = filePath & "\" & fileName
Dim byteArray() As Byte = File.ReadAllBytes(fullFilePath)
' promt the user to download the file
context.Response.Clear()
context.Response.ContentType = "application/x-please-download-me" ' "application/x-unknown"
context.Response.AppendHeader("Content-Disposition", "attachment; filename=" & fileName)
context.Response.BinaryWrite(byteArray)
context.Response.Flush()
context.Response.Close()
byteArray = Nothing
End Sub
ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
Get
Return False
End Get
End Property
End Class
Вы можете вызвать обработчик из кода позади или с языка на стороне клиента. В этом примере я использую javascript, который вызовет обработчик.
function openAttachmentDownloadHandler(fileId) {
// the location of your handler, and query strings to be passed to it
var url = "..\\_Handlers\\AttachmentDownload.ashx?";
url = url + "id=" + fileId;
// opening the handler will run its code, and it will close automatically
// when it is finished.
window.open(url);
}
Теперь прикрепите это, чтобы назначить функцию javascript событию нажатия кнопки на интерактивном элементе в вашей веб-форме. Например:
<asp:LinkButton ID="lbtnDownloadFile" runat="server" OnClientClick="openAttachmentDownloadHandler(20);">Download A File</asp:LinkButton>
Или вы также можете вызвать функцию javascript из кода:
ScriptManager.RegisterStartupScript(Page,
Page.GetType(),
"openAttachmentDownloadHandler",
"openAttachmentDownloadHandler(" & fileId & ");",
True)
Теперь, когда вы нажимаете кнопку, httpHandler получит ваш файл в браузере и спросит пользователя, хотят ли его загрузить.
Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow