一个MVC的ActionResult
可以返回多个文件吗?如果可以,它可以返回多种类型的多个文件吗?
例如:
一个ActionResult
可以返回myXMLfile1.xml、myXMLfile2.xml和myfile3.xml吗?
一个ActionResult
可以返回myXMLfile4.xml和myTXTfile1.txt吗?
如何实现这一点?
一个MVC的ActionResult
可以返回多个文件吗?如果可以,它可以返回多种类型的多个文件吗?
例如:
一个ActionResult
可以返回myXMLfile1.xml、myXMLfile2.xml和myfile3.xml吗?
一个ActionResult
可以返回myXMLfile4.xml和myTXTfile1.txt吗?
如何实现这一点?
您不能返回多个文件,但是可以将多个文件压缩成一个 .zip
文件并返回这个压缩文件。例如,可以在项目中创建一个自定义的 ActionResult,像这样:
public class ZipResult : ActionResult
{
private IEnumerable<string> _files;
private string _fileName;
public string FileName
{
get
{
return _fileName ?? "file.zip";
}
set { _fileName = value; }
}
public ZipResult(params string[] files)
{
this._files = files;
}
public ZipResult(IEnumerable<string> files)
{
this._files = files;
}
public override void ExecuteResult(ControllerContext context)
{
using (ZipFile zf = new ZipFile())
{
zf.AddFiles(_files, false, "");
context.HttpContext
.Response.ContentType = "application/zip";
context.HttpContext
.Response.AppendHeader("content-disposition", "attachment; filename=" + FileName);
zf.Save(context.HttpContext.Response.OutputStream);
}
}
}
然后像这样使用它:
public ActionResult Download()
{
var zipResult = new ZipResult(
Server.MapPath("~/Files/file1.xml"),
Server.MapPath("~/Files/file2.xml"),
Server.MapPath("~/Files/file3.xml")
);
zipResult.FileName = "result.zip";
return zipResult;
}
点击这里查看更多相关资讯,该文章关于ASP.NET MVC动态创建ZIP文件并返回的问题。