写在开始

最近在写ASP.NET Core的时候涉及到了文件读写, 发现这个东西还有一些门道在里面。

关于File

首先ControllerBase里面有一个File, 然后System.IO里面也有一个File, 这两个同名的东西功能也不一样, 一个是给用户范围文件时使用的类方法, 另一个是读写本地文件时的静态类。 但是因为都叫File, 所以导致了在Controller里面不能直接用using来直接使用System.IO里面的File

不过这都不重要了, 我想要说的是如何给用户返回一个在服务器文件系统里的一个文件。

当你有这么一个需求之后你会发现ControllerBase.File能返回的是虚拟文件, 其实也就是默认在ASP.NET Core启动目录里面的wwwroot里面的文件。 而不是文件系统里的文件。

这个时候这个关键方法出现了: ControllerBase.PhysicalFile

这个方法的使用方式和ControllerBase.File是一样的, 只不过区别就是ControllerBase.PhysicalFile第一个参数要求是真实路径, 而ControllerBase.File要求的是虚拟路径。 虽然他们的重载实现都有些区别, 但是基本使用都是一样的。

写在最后

感觉没啥好写的, 就在Controller里面想返回文件的话在虚拟目录里用File, 在物理目录里用PhysicalFile就行了。 如果涉及到的是文件读写, 那使用的就是System.IO.File来做了, 创建文件读写文件啥的都是用这个来创建流的。

Last modification:January 31st, 2020 at 02:19 pm