サーチ…


httpHandler(.ashx)を使用して特定の場所からファイルをダウンロードする

ASP.NETプロジェクト内に新しいhttpHandlerを作成します。ハンドラファイルに次のコード(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