如何将pdf存储在zip文件中,而不在本地保存

Posted

技术标签:

【中文标题】如何将pdf存储在zip文件中,而不在本地保存【英文标题】:How to store a pdf within a zip file, without saving it locally 【发布时间】:2016-11-17 09:42:38 【问题描述】:

我在 zip 文件中有一个 zip 文件,在内部 zip 文件中我有一个 Excel 和一个 PDF/Tif 文档。

我目前正在开发一种工具,可以读取所有这些文件并将它们存储在数据库中。在我先将这两个文件存储在一个文件夹中之前,但由于 zip 文件包含大量文件,我收到了磁盘空间不足的异常。

所以现在我想尝试在不知道文件夹位置的情况下直接将文件存储在数据库中。

// Path.Combine(exportPathNoZip,entry.FullName) --> \unzip\Files1\Files1.ZIP
using (ZipArchive archive = ZipFile.OpenRead(Path.Combine(exportPathNoZip,entry.FullName)))

    // These are the files inside the zip file and contain the Excel and the image
    foreach (ZipArchiveEntry item in archive.Entries)
    
        // Save image to database
        if (item.FullName.EndsWith(".tif", StringComparison.OrdinalIgnoreCase) ||
            item.FullName.EndsWith(".tiff", StringComparison.OrdinalIgnoreCase) ||
            item.FullName.EndsWith(".pdf", StringComparison.OrdinalIgnoreCase))
        
            byte[] file = File.ReadAllBytes(?????);
            _formerRepository.InsertFormerFileAsBinary(file);
        
    

但这不起作用,因为File.ReadAllBytes() 需要路径。那么我能做什么呢?在本地存储文件会给我一个磁盘空间不足的异常,没有它我没有路径。

请注意,我只想为此使用 System.IO.Compression 库。

【问题讨论】:

***.com/questions/17232414/…的可能重复 在他的帖子中,他们正在创建 zip 文件,但我想提取 zip 中的文件。 MemoryStream 可能与此有关,但我仍然想知道该怎么做。 检查这个:***.com/questions/20520238/… 【参考方案1】:

鉴于此

_formerRepository.InsertFormerFileAsBinary

需要字节[],那么这应该可以工作:

 using (System.IO.MemoryStream ms = new System.IO.MemoryStream()) 
        item.Open().CopyTo(ms);
        _formerRepository.InsertFormerFileAsBinary(ms.ToArray());
 

供参考:Creating a byte array from a stream

【讨论】:

以上是关于如何将pdf存储在zip文件中,而不在本地保存的主要内容,如果未能解决你的问题,请参考以下文章

从请求将文件上传到云存储而不在本地保存

解压缩来自服务器的 zip 文件,而不在 ios swift 中本地保存,类似于 android 的操作?

如何将来自 Firebase 的 pdf 文件保存在网络的本地文件夹中

在内存中压缩多个目录和文件,而不在磁盘上存储 zip

Xamarin.Forms 将文件 (pdf) 保存在本地存储中并使用默认查看器打开

从url下载pdf,在flutter中保存到android中的手机本地存储