zoukankan      html  css  js  c++  java
  • [转贴]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


  • 相关阅读:
    mac java 环境设置
    当你打开网页的时候,世界都发生了什么(1)
    不同场景下 MySQL 的迁移方案
    10分钟学会前端调试利器——FireBug
    中华人民共和国专利法
    【过时】博客园中使用syntaxhighlighter插件(图文详细版本)
    微软系列的网站小集合
    VS代码提示不出现或者提示变成英文或者各种奇葩问题的解决
    Linux基础命令
    【QQ技术】群文件报毒怎样下载?~ 变相绕过QQ复杂检验过程
  • 原文地址:https://www.cnblogs.com/rock_chen/p/778591.html
Copyright © 2011-2022 走看看