我正在开发一个 ASP.NET MVC 5 应用程序,我编写了一个代码,允许我下载存储在 SQL Server 数据库中的文件:varbinary
,我可以使用以下命令下载单个文件:
public JsonResult PrepareSingleFile(int [] IdArray)
{
ImageContext _contexte = new ImageContext();
var response =_contexte.contents.Find(IdArray.FirstOrDefault());
//byte[] FileData =
Encoding.UTF8.GetBytes(response.image.ToString());
byte[] FileData = response.image;
Session["data"] = FileData;
Session["filename"] = response.FileName;
return Json(response.FileName);
}
public FileResult DownloadSingleFile()
{
var fname = Session["filename"];
var data = (byte[]) Session["data"];
//return File(data,"application/pdf");
return File(data,System.Net.Mime.MediaTypeNames.Application.Pdf, fname.ToString()+".pdf");
}
但现在我想下载多个文件,因此我将每个文件的数据作为字节数组获取,并将这些字节数组放入List<byte[]>
我想将这些文件下载为 zip 文件,那么我该怎么做呢?
我试过这个:
File(data,"the Mime Type", "file name.extension")
但当data
is a List<byte[]>
.
你可以使用压缩存档 https://msdn.microsoft.com/en-us/library/system.io.compression.ziparchive(v=vs.110).aspx.NET Framework 4.5 中提供了该类。
您可以在控制器中添加一个方法来接受List<byte[]>
参数,然后将每个 byte[] 转换为内存流并将其放入像这样的 zip 文件中,
public FileResult DownloadMultipleFiles(List<byte[]> byteArrayList)
{
using (MemoryStream ms = new MemoryStream())
{
using (var archive = new ZipArchive(ms, ZipArchiveMode.Create, true))
{
foreach(var file in byteArrayList)
{
var entry = archive.CreateEntry(file.fileName +".pdf", CompressionLevel.Fastest);
using (var zipStream = entry.Open())
{
zipStream.Write(file, 0, file.Length);
}
}
}
return File(ms.ToArray(), "application/zip", "Archive.zip");
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)