.Net6 WebApi两行代码实现文件下载

d0d7731c28189c032db80e8ef7bdd7ff.png

前言

5771ae471eae663d587ed48631140945.png

4ef83d4534f0a637decf0f64d8bca9ae.png

  在之前文章中,我们使用FileStreamResult/FileResult分别实现了图片的预览和下载,这样做虽然说自定义程度高一些,安全性也相对可控,但是却又存在着便捷性的丧失。所以在一些特殊的情况下,可以考虑直接使用文件目录的方式,这玩意怎么说呢?现在拿出来其实就是一种新瓶装旧酒,之前基本全靠IIS的时候,我们直接启用目录浏览就可以了,但是现在,我们可以基于Kestrel自己写代码来实现。

代码也比较简单,但是安全性也随之降低,所以建议谨慎使用

3368af658018148f20090cd634f12cbf.png

cd1186b9ee81e05969f2e6c8cd81b605.gif

4be3ef0f61511dba012abbc5b106c5ac.jpeg

开发环境:.NET 6

开发工具:Visual Studio 2022

5d85bf469817076a16fe5bc30a71a869.png

实现步骤

8928d38988647df70d107ed63bd058ba.png

  1. 首先新建一个WebApi项目,生成后在bin\Debug\net6.0新建一个Upload文件夹,然后把你要下载的文件或者文件夹丢进去就行了

  2. 开启目录浏览,在Program中增加以下代码

app.UseDirectoryBrowser(new DirectoryBrowserOptions
{
    FileProvider = new Microsoft.Extensions.FileProviders.PhysicalFileProvider(filepath),
    RequestPath = "/Upload"
});
  1. 到此,不出意外的话,你打开https://localhost:7031/upload/就可以看见文件目录了,如果文件不是可以直接在网页打开的格式的话,点击就可以下载了

  2. 如果是可以预览的格式,如:txt,那么再加下面一句,也就可以直接打开了

app.UseStaticFiles();
  1. 上面这样做其实不太好,我怎么能把整个目录的文件暴漏出去呢?只是想提供一个下载地址而已,所以,把上面的代码注释掉,换成以下代码,这样就不能直接访问目录而且还可以正常下载文件了

app.UseStaticFiles(new StaticFileOptions
{
    FileProvider = new Microsoft.Extensions.FileProviders.PhysicalFileProvider(filepath),
    RequestPath = "/Upload"
});

4458a173c87ff8ae9e1283c3b2a90216.png

实现效果

5a3d7f67f08b13e373c275941a6ff436.png

99106cbe61252058ec1fe6427894b19c.gif

-

技术群:添加小编微信并备注进群

小编微信:mm1552923   

公众号:dotNet编程大全    

4cf027895c799c517ce91f716a04d129.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值