Загрузить несколько выбранных файлов Grid / Telerik Rad из Azure хранилища BLOB-объектов - PullRequest
0 голосов
/ 09 марта 2020

У меня есть вид сетки / сетка telerik rad с флажком в каждой строке, где пользователь может выбирать любые документы, которые ему нужно загрузить, и есть обычная кнопка asp. net вне сетки, которую можно использовать для загрузки всех выбранные файлы из azure BLOB-объектов на компьютер пользователя. Я использовал ICSharpCode.SharpZipLib.Zip из пакета nuget, он не работал. Нет ошибок, но не загружаются файлы. Есть решения? .

Imports ICSharpCode.SharpZipLib.Zip


 Protected Sub downloadbutton_Click(sender As Object, e As EventArgs) Handles downloadbutton.Click

             Response.AddHeader("Content-Disposition", "attachment; filename=" + "myfilezip" + ".zip")
              Response.ContentType = "application/zip"
               Using zipStream As ZipOutputStream = New ZipOutputStream(Response.OutputStream)

                For Each item As Telerik.Web.UI.GridDataItem In grid.Items

                    If CType(item.FindControl("myCheckBox"), CheckBox).Checked Then

            Dim blockBlob As CloudBlockBlob = GetStorageAccountDetails.GetBlockBlobReference(""container info and file path)

                Dim sr as stream= blockBlob.OpenRead()
                     Dim ms As System.IO.MemoryStream = New IO.MemoryStream()
                        sr.CopyTo(ms)
                        Dim buffer As Byte() = ms.ToArray()

                        Dim fileEntry = New ZipEntry(fileName) With {
                            .Size = buffer.Length()
                        }



                        zipStream.PutNextEntry(fileEntry)
                        zipStream.Write(buffer, 0, buffer.Length)
                    End If
                Next


                zipStream.Flush()
                zipStream.Close()

end sub 

1 Ответ

0 голосов
/ 10 марта 2020

Я использовал библиотеку DotNetZip, скачанную через менеджер пакетов Nuget, и она работала хорошо.

Response.Clear()
Response.BufferOutput = False
Dim archiveName As String = "myfile.zip"

Response.ContentType = "application/zip"
Response.AddHeader("content-disposition", "filename=" + archiveName) 
Dim i as integer=1 
 Using zipDownload1 As Ionic.Zip.ZipFile = New Ionic.Zip.ZipFile()
    For Each item As Telerik.Web.UI.GridDataItem In Grid.Items

        If CType(item.FindControl("mycheckbox"), CheckBox).Checked Then

         Dim blockBlob As CloudBlockBlob = GetStorageAccountDetails.GetBlockBlobReference(""container info and file path)

        Dim sr as stream= blockBlob.OpenRead()
             Dim ms As System.IO.MemoryStream = New IO.MemoryStream()
                sr.CopyTo(ms)
                Dim buffer As Byte() = ms.ToArray()


            zipDownload1.AddEntry("fileName"+i.tostring(), buffer) 
            i=i+1

        End If
    Next


    zipDownload1.Save(Response.OutputStream)

    Response.Close()


End Using
...