Большие файлы данных не полностью архивируются из Azure и выдают ошибку при распаковке Azure C # - PullRequest
0 голосов
/ 17 сентября 2018

При использовании этого кода для архивации голубых объектов изображения полностью архивируются при использовании localhost.Но при загрузке на веб-сайт Azure большие файлы данных архивируются не полностью, а при разархивировании выдается ошибка.

Пожалуйста, проверьте, есть ли какая-либо ошибка в этом коде, чтобы я мог знать, по крайней мере,причина этой ошибки

private void OutputBlobDirectoryAsZipDownload(CloudBlobDirectory directory, string filename)
{
    byte[] buffer = new byte[4096];
    using (var zipOutputStream = new ZipOutputStream(Response.OutputStream))
    {
        zipOutputStream.SetLevel(0); // 0 - store only to 9 - means best compression
        Response.BufferOutput = false;
        Response.AppendHeader("content-disposition", "attachment; filename=\"" + filename + ".zip\"");
        Response.ContentType = "application/octet-stream";

        try
        {
            var allFiles = directory.ListBlobs(true, BlobListingDetails.None, new BlobRequestOptions
            {
                ServerTimeout = new TimeSpan(1, 0, 0),
                MaximumExecutionTime = new TimeSpan(1, 0, 0)
            }).
                Where(x => x.GetType() == typeof(CloudBlockBlob) && x.Uri.ToString().Contains("thumb$") != true).Cast<CloudBlob>();
            if (allFiles.Count() > 0)
            {
                foreach (var file in allFiles)
                {
                    Stream fs = file.OpenRead();
                    var entryName = file.Uri.ToString().Replace(directory.Uri.ToString(), "");
                    ZipEntry entry = new ZipEntry(ZipEntry.CleanName(entryName));
                    entry.Size = fs.Length;
                    zipOutputStream.PutNextEntry(entry);

                    int count = fs.Read(buffer, 0, buffer.Length);
                    while (count > 0)
                    {
                        zipOutputStream.Write(buffer, 0, count);
                        count = fs.Read(buffer, 0, buffer.Length);
                        if (!Response.IsClientConnected)
                        {
                            break;
                        }
                        Response.Flush();
                    }
                    fs.Close();
                }
                zipOutputStream.Close();
                Response.End();
            }
            else
            {

            }
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }
}
...