.Net5 WebApi中下载文件(返回FileStreamResult)

本文介绍了如何在.NET 5的WebApi中使用FileStreamResult返回类型下载文件,包括文件验证、路径获取、文件复制以及自定义文件名。客户端通过POST请求提交文件URL和可选的文件名进行下载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

.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>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值