将第三方软件返回的byte []转换为zip文件

时间:2018-04-25 14:17:33

标签: asp.net

正在浏览stackoverflow文章Convert to Zip file,但我的问题有点不同。我没有PDF文件。在通过名为HiQPDF的第三方软件将HTML转换为PDF后,我得到了bytes数组,我希望将相同的数组转换为zip文件。我将字节数组转换为zip的代码是

private void  DownloadZipFile(HttpContext aHttpContext, byte[] pdfBuffer)
    {
        try
        {
            using (var memoryStream = new MemoryStream())
            {
                using (var archive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true))
                {
                    archive.CreateEntry(NomineeName + ".pdf", CompressionLevel.Fastest);
                }

                //return the ZIP byte stream as base 64 string
                memoryStream.Seek(0, SeekOrigin.Begin);
                byte[] zipArchive = memoryStream.ToArray();

                aHttpContext.Response.ContentType = "application/zip";

                aHttpContext.Response.AddHeader("content-disposition", String.Format("{0}; filename={1}; size={2}",
                                                  "attachment", "\"" + this.NomineeName + ".zip\"", zipArchive.Length));

                aHttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);

                aHttpContext.Response.BinaryWrite(zipArchive);

                aHttpContext.Response.End();

            }
        }
        catch (Exception exception)
        {
            new LogDetails { Exception = exception }.AddLog();

            this.ShowErrorMessage(aHttpContext);
        }

    }

此代码下载了zip文件,但我知道我遗漏了某些地方,因此我无法在解压缩后打开PDF文件。

  

参数中的pdfBuffer是HiQPDF返回的字节数组。

感谢您的帮助。我知道我在复制这个问题,但我需要知道我错在哪里。我搜索了很多文章和博客,但我仍然找不到我的错误。

1 个答案:

答案 0 :(得分:0)

通过一点R& D我发现我没有将数据写入zip文件中新创建的条目,因此我错过了几行代码:

using (BinaryWriter writer = new BinaryWriter(readmeEntry.Open()))
 {
    writer.Write(pdfBuffer);
 }

之后添加这些代码行
archive.CreateEntry(NomineeName + ".pdf", CompressionLevel.Fastest);

解决了我的问题。