【发布时间】:2019-11-17 20:05:48
【问题描述】:
我需要修改现有 Web API 的控制器。控制器有三种方法,我想将它们组合起来(A、B 和 C)。每个方法都使用一个返回 ionic ZipFile 的通用方法。 方法 A 返回 zipfile1,方法 B 返回 zipfile2,方法 C 返回 zipfile3。但是现在 zipfile3 不再需要,C 需要将 zipfile1 和 zipfile2 的内容返回到一个 zipfile 中,这是这个问题的目标。
常用方法首先循环从DB中获取文件内容,使用AddEntry将内容添加到zipfile中,并返回zipfile。每个 zipfile 都有自己的文件夹结构。
我认为常用方法的返回类型是关键。并且个人认为有两种方法可以实现:
- 制作常用方法ZipFile的返回类型,并将返回的zipfile转换为byte然后stream,然后添加到C中的zipfile中。(见idea1图片)
- 制作常用方法MemoryStream的返回类型并添加到C中的zipfile中。(见idea2图片)
idea2 听起来比idea1 更好,因为它消除了一些将zipfile 转换为字节到流的步骤。
我尝试了什么:
- Idea1,但是当我执行程序时,可以下载 400kb 的 zipfile。但是当我提取它时,它具有文件夹结构,但实际上是空的。我猜将 zipfile 转换为字节流的步骤是错误的,但没有正确。
- Idea2,我可以将返回类型作为流,并可以从 C 下载 zipfile,但它没有指定的文件夹结构和内容。
我的问题是:
- 哪种想法更适合这种情况?
- 对于 Idea1,在将 zipfile 转换为字节和流时我有什么问题?为什么下载的 zipfile 没有内容?
- 对于 Idea2,如何返回具有文件夹结构的流?
- 我遗漏了什么概念?
【问题讨论】:
-
1) 您可能在谈论 Ionic.Zip 库;这与标签“ionic2”所指的“Ionic SDK”无关。 2) 您是否希望生成的 ZIP 文件包含输入 ZIP 文件的合并结构;或者生成的 ZIP 文件是否应包含两个原始 ZIP 文件是其唯一内容?
-
@KlausGütter 我删除了标签。我打算标记 Ionic,但不小心做到了。我想要生成的 zipfile 中的两个文件夹。并且每个文件夹都有自己的文件夹结构,这意味着我不想合并文件夹结构。我想将两个没有 zip 的文件夹存储到一个带 zip 的父文件夹中。
标签: c# zip memorystream