• [转贴]ASP.NET File Downloading


    原帖地址 http://msdn.microsoft.com/msdnmag/issues/06/09/WebDownloads/default.aspx

    偶尔发现这篇文章,浏览了一下,把关键代码COPY,留作纪念。

    1.下载文件而不是打开文件(Forcing a File Download Dialog):Setting the Content-Disposition Response Header
    Sub Page_Load(ByVal sender As ObjectByVal e As EventArgs)
        
    Dim dlDir As String = "downloadfiles/"
        
    Dim strFileName As String = Request.QueryString("FileName")
        
    Dim path As String = Server.MapPath( _
            dlDir 
    + Request.QueryString("FileName"))
        
    Dim toDownload As System.IO.FileInfo = New System.IO.FileInfo(path)

        
    If IsSafeFileName(strFileName) AndAlso toDownload.Exists Then
            Response.Clear()
            Response.AddHeader(
    "Content-Disposition", _
                               
    "attachment; filename=" & toDownload.Name)
            Response.AddHeader(
    "Content-Length", _
                               file.Length.ToString())
            Response.ContentType 
    = "application/octet-stream"
            Response.WriteFile(file.FullName)
            Response.End()
        
    Else
            BindFileDataToGrid(
    "Name")
        
    End If
    End Sub

    2.分块下载大文件(Downloading Huge Files in Small Pieces):Writing File Chunks to the Client
    Sub Page_Load(ByVal sender As ObjectByVal e As EventArgs)
        
    Dim dlDir As String = "downloadfiles/"
        
    Dim strFileName As String = Request.QueryString("FileName")
        
    Dim path As String = Server.MapPath( _
            dlDir 
    + Request.QueryString("FileName"))
        
    Dim toDownload As System.IO.FileInfo = New System.IO.FileInfo(path)

        
    If IsSafeFileName(strFileName) AndAlso toDownload.Exists Then
            
    Const ChunkSize As Long = 10000
            
    Dim buffer(ChunkSize) As Byte
                
            Response.Clear()
            Using iStream 
    As FileStream = File.OpenRead(path)
                
    Dim dataLengthToRead As Long = iStream.Length
                Response.ContentType 
    = "application/octet-stream"
                Response.AddHeader(
    "Content-Disposition", _
                                   
    "attachment; filename=" & toDownload.Name)
                
    While dataLengthToRead > 0 AndAlso Response.IsClientConnected
                    
    Dim lengthRead As Integer = _
                        iStream.Read(buffer, 
    0, ChunkSize)
                    Response.OutputStream.Write(buffer, 
    0, lengthRead)
                    Response.Flush()
                    dataLengthToRead 
    = dataLengthToRead - lengthRead
                
    End While
            
    End Using
            Response.Close()
        
    Else
            BindFileDataToGrid(
    "Name")
        
    End If
    End Sub

    3.解决用BinaryWrite或下载大文件导致大内存丢失:Using TransmitFile
    Sub Page_Load(ByVal sender As ObjectByVal e As EventArgs)
        
    Dim dlDir As String = "downloadfiles/"
        
    Dim strFileName As String = Request.QueryString("FileName")
        
    Dim path As String = Server.MapPath( _
            dlDir 
    + Request.QueryString("FileName"))
        
    Dim toDownload As System.IO.FileInfo = New System.IO.FileInfo(path)

        
    If IsSafeFileName(strFileName) AndAlso toDownload.Exists Then
            Response.Clear()
            
    Select Case System.IO.Path.GetExtension(strFileName)
                
    Case ".zip"
                    Response.ContentType 
    = "application/x-zip-compressed"
                    Response.AddHeader(
    "Content-Disposition", _
                        
    "attachment;filename=NEWDL_" + toDownload.Name)
                    Response.TransmitFile(path)

                
    Case Else
                   ‘ File Extension 
    not supported.
            
    End Select
            Response.End()
        
    Else
            BindFileDataToGrid(
    "Name")
        
    End If
    End Sub


  • 相关阅读:
    update mysql row (You can't specify target table 'x' for update in FROM clause)
    MySQL中使用group by 是总是出现1055的错误
    centos7下查看mysql配置文件适用顺序
    mysql中EXPLAIN 的作用
    查看mysql库大小,表大小,索引大小
    mysql互换表中两列数据方法
    mysql在建表语句中添加索引
    使用vue-lazyload实现图片懒加载
    vue使用jsonp获取数据,开发热卖推荐组件
    vue实现首页导航面板组件
  • 原文地址:https://www.cnblogs.com/rock_chen/p/778591.html
Copyright © 2020-2023  润新知