.Net5 WebApi中下载文件(返回FileStreamResult)
WebApi Code
/// <summary>
/// 下载文件 LastUpdateDate:2021-07-14 18:25:03.811 Author:Lingbug
/// </summary>
/// <returns></returns>
[HttpPost, AllowAnonymous]
public IActionResult DownloadFile()
{
//文件地址
var fileUrl = Request.Form["fileUrl"].ToString();
//校验
if (fileUrl.IsNullOrWhiteSpaceString()) throw new ErpFriendlyException("要下载的文件地址不能为空!");
//文件路径
string filePath = FileUtil.GetFullPath(fileUrl);
//校验
if (!System.IO.File.Exists(filePath)) throw new ErpFriendlyException("要下载的文件不存在!");
//新文件
var copyFile = new SaveFileOutput(Path.GetFileName(filePath), SaveFileOutputFileNameTypeEnum.TimeStamp, "UploadFiles", "DownloadFile", "Copy");
//复制文件
System.IO.File.Copy(filePath, copyFile.FileFullPath, true);
//文件名
var fileName = Request.Form["fileName"].ToString();
//文件名
if (fileName.IsNullOrWhiteSpaceString()) fileName = Path.GetFileName(filePath);
//下载
return new FileStreamResult(new FileStream(copyFile.FileFullPath, FileMode.Open), "application/octet-stream") { FileDownloadName = fileName.TrimStr() };
}
Client Code
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>@ViewBag.Title</title>
</head>
<body>
<div id="app">
<input type="button" value="测试下载" id="btnTestDownload" />
<form id="fileForm" action="" method="post">
<input id="fileName" name="fileName" value="" />
<input id="fileUrl" name="fileUrl" value="" />
<input type="submit" value="提交" id="btnDownload" />
</form>
</div>
</body>
</html>
<script src="~/lib/jquery-3.4.1.min.js"></script>
<script src="~/Scripts/lingbugUtil.js"></script>
<script>
$(function () {
$('#btnTestDownload').click(function () {
//api地址
var host = 'http://localhost:55992';
//api地址
document.getElementById('fileForm').setAttribute('action', host + '/erpApi/LevoxErpBase/DownloadFile');
//要下载的文件路径
document.getElementById('fileUrl').value = '/LevoxFiles/UploadFiles/Temp/外出质检报告202102020003_20210609095346218_2.jpg';
//要下载下来的文件名
document.getElementById('fileName').value = 'lingbug.jpg';
//下载
document.getElementById('btnDownload').click();
});
});
</script>