将 zip 文件写入 MemoryStream
Write zip files to MemoryStream
我有一个创建 zip 文件并发送回用户以供下载的控制器操作。问题是 zip 文件已创建,但它是空的。不知何故,它没有将图像文件写入 MemoryStream。我想知道我错过了什么。如果我将 zip 文件写入磁盘,一切都会按预期工作,但如果可以避免,我宁愿不将文件保存到磁盘。这是我使用 dotnetzip 尝试过的:
public ActionResult DownloadGraphs()
{
var state = Session["State"];
using (ZipFile zip = new ZipFile())
{
if (state == "IA")
{
zip.AddFile(Server.MapPath("~/Content/DataVizByState/FallGraphs/Watermarked/Fall_IA.jpg"), "");
zip.AddFile(Server.MapPath("~/Content/DataVizByState/SpringGraphs/Watermarked/Spring_IA.jpg"), "");
}
MemoryStream output = new MemoryStream();
zip.Save(output);
output.Seek(0, SeekOrigin.Begin);
var fileName = state + "Graphs.zip";
return File(output, "application/zip", fileName);
}
}
这会根据单击按钮在视图中强制下载:
$('#graphDwnldBtn').click(function (evt) {
window.location = '@Url.Action("DownloadGraphs", "DataSharing")';
})
我需要使用 StreamWriter 还是 Reader 之类的?这是我第一次尝试这样的事情,它是通过阅读各种 Whosebug 帖子拼凑而成的...
愚蠢的错误:Session["State"]
是一个 object
,所以 state
变量输出为 object
而不是我需要的 string
是为了让我的条件语句正确评估。我将 state
转换为 string
来修复它。固定码:
public ActionResult DownloadGraphs()
{
var state = Session["State"].ToString();
using (ZipFile zip = new ZipFile())
{
if (state == "IA")
{
zip.AddFile(Server.MapPath("~/Content/DataVizByState/FallGraphs/Watermarked/Fall_IA.jpg"), "");
zip.AddFile(Server.MapPath("~/Content/DataVizByState/SpringGraphs/Watermarked/Spring_IA.jpg"), "");
}
MemoryStream output = new MemoryStream();
zip.Save(output);
output.Seek(0, SeekOrigin.Begin);
var fileName = state + "Graphs.zip";
return File(output, "application/zip", fileName);
}
}
我有一个创建 zip 文件并发送回用户以供下载的控制器操作。问题是 zip 文件已创建,但它是空的。不知何故,它没有将图像文件写入 MemoryStream。我想知道我错过了什么。如果我将 zip 文件写入磁盘,一切都会按预期工作,但如果可以避免,我宁愿不将文件保存到磁盘。这是我使用 dotnetzip 尝试过的:
public ActionResult DownloadGraphs()
{
var state = Session["State"];
using (ZipFile zip = new ZipFile())
{
if (state == "IA")
{
zip.AddFile(Server.MapPath("~/Content/DataVizByState/FallGraphs/Watermarked/Fall_IA.jpg"), "");
zip.AddFile(Server.MapPath("~/Content/DataVizByState/SpringGraphs/Watermarked/Spring_IA.jpg"), "");
}
MemoryStream output = new MemoryStream();
zip.Save(output);
output.Seek(0, SeekOrigin.Begin);
var fileName = state + "Graphs.zip";
return File(output, "application/zip", fileName);
}
}
这会根据单击按钮在视图中强制下载:
$('#graphDwnldBtn').click(function (evt) {
window.location = '@Url.Action("DownloadGraphs", "DataSharing")';
})
我需要使用 StreamWriter 还是 Reader 之类的?这是我第一次尝试这样的事情,它是通过阅读各种 Whosebug 帖子拼凑而成的...
愚蠢的错误:Session["State"]
是一个 object
,所以 state
变量输出为 object
而不是我需要的 string
是为了让我的条件语句正确评估。我将 state
转换为 string
来修复它。固定码:
public ActionResult DownloadGraphs()
{
var state = Session["State"].ToString();
using (ZipFile zip = new ZipFile())
{
if (state == "IA")
{
zip.AddFile(Server.MapPath("~/Content/DataVizByState/FallGraphs/Watermarked/Fall_IA.jpg"), "");
zip.AddFile(Server.MapPath("~/Content/DataVizByState/SpringGraphs/Watermarked/Spring_IA.jpg"), "");
}
MemoryStream output = new MemoryStream();
zip.Save(output);
output.Seek(0, SeekOrigin.Begin);
var fileName = state + "Graphs.zip";
return File(output, "application/zip", fileName);
}
}