大家好,今天写一下文件上传和下载相关的方法。
新建一个file控制器,进行file相关的操作。并写入测试方法,看前端api展示效果如何。
![v2-7323fb3aa4aa0cdb3a5c7b73fc05f6fc_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/d0c999ef7cb7d9ef0b7160fa1ab42c63.jpeg)
运行项目如下,选中一个图片上传进行测试:
![v2-a11ec46fc4959e3760e6357bb1016a97_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/aa0c52d4daf59ca3ed7546a0aeff8ec5.jpeg)
如下图,响应了ok,说明项目api没什么问题。
![v2-2c9772fe7a8554b624bdb26030263b6d_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/76bf31258635ca24be95e2b86647646a.jpeg)
接下来,先进行文件上传方法。本项目框架使用net core3.1,以后所有实践均在此项目下。服务接口层和实现层完善相应方法,并在容器中注入。
![v2-3447b5bc74e4278d22f38de58c185ecb_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/cf9367ae574db82ae8b48c5a279b6028.jpeg)
![v2-cf38c0257eb5de33b837180039f42f02_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/9413d1ece976bbe64ed7db74880edcd0.jpeg)
![v2-1f8a36480689ef9ca93f6129bacc96f8_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/8e153310218689e01dccfc305dc40b17.jpeg)
测试一下,看是否成功:
![v2-d7989b8f7f9962eb064314a4d9fc5bcf_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/edbb61a6e63a32da544e2392f702e398.jpeg)
我试了下没有传文件,就执行,发现,报那么大一串,显然只有只有第一句是我想要的错误信息提示,其他的堆栈代码行什么的信息可以弄进日志里,所以我们把全局异常处理给弄进去,上次写的是控制器过滤器拦截,这次进行中间件写入拦截(其实感觉都一样emmmm):
![v2-647fcb32a95b6a78255ade15601653b4_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/19b19a53e54e8a065845490d18554149.jpeg)
这里其实写的不是很好,下一次我们将在这里进行优化,做一个统一的返回信息的格式。
测试一下如下:
![v2-2d4695872624c9dae85f38e83e93c84d_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/4217980529642b09730c271fdcbad66f.jpeg)
记得中间件要在Configure里面使用一下,否则。。没啥用。
现在来上传下文件试试:
![v2-1b732eeeb021deb0e32889956e7963ed_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/e00115e3eab099bc3d8d8b5b618774c8.jpeg)
ok,文件完美上传。
接下来是下载:我们采用流的形式返回文件:
![v2-b37c28c404f7905965c7dbbbb5fcecbf_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/c7ff1fc1fabdc19f2e66215a14b50d5a.jpeg)
这里的contentType我写的是application/octet-stream,一般用于不知道是什么文件类型的时候使用,如果你知道具体的文件类型,也可以使用其他的contentType,具体参照问w3c上的http的contentType传输标准。
![v2-3e9a8116a43b555a5aedf86171c6039c_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/3b769efc6b4642b6c24a614a4fecff6a.jpeg)
测试一下:
![v2-14a4f6a3d2132bb9552d90d9d2f37171_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/e4209732c963d4e181e9a60631803c25.jpeg)
点击下载:
![v2-08a0ace88c772b0c5bbd60cf3c085aeb_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/9265994afcfdf982b4ea88e4d3788a84.jpeg)
下载成功打开
![v2-08923a377e9ec89086f8285eb707ccc0_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/d526105ea996908f2a47c1ec10b49a61.jpeg)
本次demo写入到此结束,下次将写一下文件限制(大小、类型),文件上传的另一种形式,流上传;本次是使用IFormFile,整个文件读入 IFormFile,它是文件的C#表现形式,用于处理或者保存文件。文件上传所用的资源(磁盘、内存)取决于并发文件上传的大小。
可能写的有点粗糙,慢慢优化和整改。