写在开始
最近在写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
来做了, 创建文件读写文件啥的都是用这个来创建流的。