This project is read-only.

DotNetZip download works in one site, not another

Jun 18, 2015 at 11:13 PM
Edited Jun 19, 2015 at 6:12 PM

I thought this was a problem with ZipFile.Save(to page context).

However, I rewrote the function below to convert the ZipFile to memorystream and then to binary array, and then download the binary array, and it gives the same error. The ZipFile saves to disk just fine, so I don't think it's the file content. Summary is that this is probably not a ZipFile issue, so doesn't really belong in this forum any more.

The code below works fine in a test site but fails in the main site (both are dev sites on the same machine).

The code below is set up to have a switch to write to disk or not.
A) When it is set to write to disk, the disk write looks fine; well formed zip, opens fine, content is as expected. However, when it then hits this statement:
it jumps to the catch with this error:
            "Cannot read that as a Zip file".  
B) when it is set to skip the write to disk, there is no error, but also no action, and the page goes "dead", i.e. local js still works but callbacks don't. It recovers with F5 on the browser.

Again, the exact same code including this:
works fine on the test site.

I have a more extensive write up here:

Where I describe how I replicated the exact same download data in both the test and main sites.

However it seems to narrow down to the " to download stream" statement, and it's a mystery why it works in the test site but not the main site.

Any suggestions on further diagnostics or fixes would be appreciated.

Public Sub ZipAndDownloadMemoryStreams(ByVal context As HttpContext) _
Implements IHttpHandler.ProcessRequest
    Dim rtn As String = ""

        Dim wrkAr As ArrayList
        wrkAr = SC.ContentArrayForDownLoad
        If wrkAr.Count = 0 Then
            Dim wrkStop As Integer = 0
            Exit Sub
        End If

        Dim wrkFS As ZipDownloadContentPair
        Using wrkZip As New ZipFile
            '----- create zip, add memory stream----------
            For n As Integer = 0 To wrkAr.Count - 1
                wrkFS = wrkAr(n)
                wrkZip.AddEntry(wrkFS.FileName, wrkFS.ContentStream)

            context.Response.ContentType = "application/force-download"
            context.Response.AddHeader( _
                "content-disposition", _
                "attachment; filename=" & "")

            '---- save context (initiate download)-----
            Dim wrkFilePath As String = ""
            If 1 = 1 Then
                wrkFilePath = "D:\XYZ\"
            End If


        End Using

    Catch ex As Exception
        Dim exmsg As String = ex.Message
        Dim wrkStop As String = ""
    End Try
End Sub