在内存生成zip文件流MemorySteam  然后提供下载。高手给贴下标准代码吧。
      我的代码好像有问题,
                    Using ms As MemoryStream = New MemoryStream(BC_Zip.MeoryStreamZIP(zf).ToArray())
                        Response.AddHeader("Accept-Ranges", "bytes")
                        Response.ContentType = "application/x-zip-compressed"
                        Response.AddHeader("Content-Disposition", "attachment;filename=" & "DocumentsZip.zip")
                        Dim buffer() As Byte
                        buffer = ms.ToArray()
                        
                        Response.AddHeader("Content-Length", ms.Length.ToString())
                        ms.Read(buffer, 0, CInt(ms.Length))
                        Response.BinaryWrite(buffer)
                        ms.Close()
                        Response.End()
我在demo中生成的文件可以打开使用。但是放到项目中就打不开了。必须用解压软件才能打开。我该怎样改这段代码呢。
求教高手

解决方案 »

  1.   

    Response.ContentType = "application/zip" 用这个试试http://blog.csdn.net/fanweiwei/archive/2007/09/17/1787747.aspx
      

  2.   

    因为你写了“attachment”,而不是“inline”之类的。
      

  3.   

    另外,在 buffer = ms.ToArray() 之前或许应该写一行 ms.Flush() 才能保证完全输出内容。
      

  4.   

    http://www.codeproject.com/Questions/79030/Want-to-increase-MemoryStream-size.aspx
      

  5.   


    attachment  是附件形势下载。inline  是在浏览器打开。
      

  6.   


    加了这个,但是还是不行。不知道为什么,我的demo可以。我的项目就是出错
      

  7.   

    demo可以是什么意思?
    项目里的做法跟DEMO里的做法完全一样吗?
    出什么错?
    错误消息贴出来
      

  8.   

    问题解决了。在下载前加入Response.Clear(),就可以了。文件可以直接打开了。只不过现在不知道,为什么写示例程序是也没有加这行就可以完整下载。不明白。如果有知道赐教下啊                    Response.Clear()
                        Using ms As MemoryStream = New MemoryStream(BC_Zip.MeoryStreamZIP(zf).ToArray())
                            Response.ContentType = "application/zip"
                            Response.AddHeader("Content-Disposition", "attachment;filename=" & "DocumentsZip.zip")
                            Dim buffer() As Byte
                            ms.Flush()
                            buffer = ms.ToArray()
                            ms.Read(buffer, 0, CInt(ms.Length))
                            Response.OutputStream.Write(buffer, 0, CInt(ms.Length))
                            ms.Close()
                            Response.Flush()
                            Response.End()
                            If originalFileNamecollection.Count > 0 Then
                                For i As Integer = 1 To originalFileNamecollection.Count
                                    BC_File.DeleteFile(originalFileNamecollection(i).ToString())
                                Next
                            End If
                        End Using