I am trying to incorporate the latest build with ZipArchive rather than ZipPackage and am having difficulty getting it to create a valid zip file. Here is what works using the ZipPackage:
Dim VehicleID As Int32 = CInt(ddVehicleList.SelectedValue) Dim memStream As New MemoryStream() Dim Package As ZipPackage = ZipPackage.Create(memStream) If VehicleID <> 0 Then Dim fileIndex As Int32 = 0 For Each lvItem As ListViewItem In lvImages.Items Try Dim cbSelected As CheckBox = lvItem.FindControl("cbSelected") If cbSelected.Checked Then fileIndex += 1 Dim url As String = cbSelected.Attributes("url") Dim photo As ZipData.Photo = GetPhotoWithTagByURL(url, lvItem, fileIndex) Dim stream As Stream = New MemoryStream(photo.Data) Package.AddStream(stream, photo.Name) End If Catch ex As Exception End Try Next Else End If
SendZipToClient(memStream, Package
Private Sub SendZipToClient(memStream As MemoryStream, Package As ZipPackage) Dim FileName As String = ddVehicleList.SelectedItem.Text.Trim.Replace(" ", "_") Package.Close(False) memStream.Position = 0 If memStream IsNot Nothing AndAlso memStream.Length > 0 Then Response.Clear() Response.AddHeader("content-disposition", "attachment; filename=" + FileName + "_images.zip") Response.ContentType = "application/zip" Response.BinaryWrite(memStream.ToArray()) Response.[End]() End If End Sub
This is what I have so far with ZipArchive (gives me an invalid zip file):
Dim VehicleID As Int32 = CInt(ddVehicleList.SelectedValue) Dim memStream As New MemoryStream() Dim Archive As New ZipArchive(memStream, ZipArchiveMode.Create, False, System.Text.Encoding.UTF8) If VehicleID <> 0 Then Dim fileIndex As Int32 = 0 For Each lvItem As ListViewItem In lvImages.Items Try Dim cbSelected As CheckBox = lvItem.FindControl("cbSelected") If cbSelected.Checked Then fileIndex += 1 Dim url As String = cbSelected.Attributes("url") Dim photo As ZipData.Photo = GetPhotoWithTagByURL(url, lvItem, fileIndex) Dim stream As Stream = New MemoryStream(photo.Data) 'Package.AddStream(stream, photo.Name) Dim lAttachment As ZipArchiveEntry = Archive.CreateEntry(photo.Name) Using lAttachmentStream = lAttachment.Open() Using lStreamWriter = New StreamWriter(stream) lStreamWriter.Flush() End Using End Using lAttachment.Dispose() End If Catch ex As Exception End Try Next Else End If SendZipToClient(memStream, Archive)Private Sub SendZipToClient(memStream As MemoryStream, Package As ZipArchive) Dim FileName As String = ddVehicleList.SelectedItem.Text.Trim.Replace(" ", "_") 'Package.Close(False) memStream.Position = 0 If memStream IsNot Nothing AndAlso memStream.Length > 0 Then Response.Clear() Response.AddHeader("content-disposition", "attachment; filename=" + FileName + "_images.zip") Response.ContentType = "application/zip" Response.BinaryWrite(memStream.ToArray()) Response.[End]() End If End SubCan you please tell me what I am doing wrong?
Thanks.
Charles
