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
Sub
Can you please tell me what I am doing wrong?
Thanks.
Charles