Angular问题总结-文件的下载
问题描述:主要分为单个文件下载,以及文件压缩之后下载
解决方案:
压缩文件的下载:
//后端代码
//压缩后下载
//首选需要去判断压缩文件存放的目录是否存在,必须存在
var zipUrl = Path.Combine(Environment.CurrentDirectory, IMSConstants.FileTempStorageFolder);
if (!Directory.Exists(zipUrl)) {
//文件夹创建
Directory.CreateDirectory(zipUrl);
}
//文件存放的文件夹目录
string startPath = Path.Combine(Environment.CurrentDirectory, 文件夹目录);
//压缩文件名
string fileName = DateTime.Now.ToString("HH\\mm\\ss") + "result.zip";
//压缩文件存放的目录
string zipPath = Path.CombinezipUrl, fileName);
//创建压缩文件
ZipFile.CreateFromDirectory(startPath, zipPath);
//new一个内存流,因为文件流如果要返回前端,再返回过程中不可以关闭,并且新建的压缩文件也就无法删除
MemoryStream ms = new MemoryStream();
using (FileStream fs = new FileStream(zipPath, FileMode.Open))
{
// 将文件流写入到内存流中,不过要给Position定义为0 让他重新读
fs.CopyTo(ms);
ms.Position = 0;
}
//删除压缩文件
System.IO.File.Delete(zipPath);
//返回内存流,此时文件不建议过大,会造成延迟
return File(ms, "application/octet-stream", DateTime.Now.ToString("HHmmss") + "result.zip");
//前端下载
直接将请求放入到超联系的href中即可
单个文件下载
string sFilePath = Path.Combine(Environment.CurrentDirectory, model.Path);
FileStream fs = new FileStream(sFilePath, FileMode.Open);
//如果文件下载之后需要删除 可以仿照压缩文件将文件流写入到内存中即可
return File(fs, "application/octet-stream", model.Path_Name);