ZetCode

ASP.NET 文件操作

最后修改于 2025 年 4 月 3 日

在本文中,我们将使用 File 类在 ASP.NET 8 中探索文件操作。System.IO.File 类提供了用于文件创建、复制、删除和其他操作的静态方法。

ASP.NET 是一个用于构建现代 Web 应用程序的跨平台框架。文件操作对于处理上传、下载和数据存储至关重要。

基本定义

.NET 中的 File 类提供了用于文件操作的静态方法。它属于 System.IO 命名空间,并以平台无关的方式与文件系统进行交互。

文件操作包括创建、复制、移动、删除以及读/写文件。该类还提供了用于检查文件存在性及属性的方法。

在 ASP.NET 中,文件操作通常用于处理文件上传、提供下载、日志记录和配置。请始终妥善处理文件操作中的错误。

ASP.NET 文件示例

以下示例演示了 ASP.NET Web API 中的各种文件操作。

Program.cs
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();

var app = builder.Build();

app.MapControllers();
app.Run();

这设置了一个基本的 ASP.NET 应用程序,并支持控制器。MapControllers 方法为控制器启用属性路由。

Controllers/FileController.cs
using Microsoft.AspNetCore.Mvc;
using System.IO;
using System.Text;

[ApiController]
[Route("api/[controller]")]
public class FileController : ControllerBase
{
    private readonly string _basePath = Path.Combine(Directory.GetCurrentDirectory(), "Files");

    [HttpPost("upload")]
    public async Task<IActionResult> UploadFile(IFormFile file)
    {
        if (file == null || file.Length == 0)
            return BadRequest("No file uploaded");

        Directory.CreateDirectory(_basePath);
        var filePath = Path.Combine(_basePath, file.FileName);

        using (var stream = new FileStream(filePath, FileMode.Create))
        {
            await file.CopyToAsync(stream);
        }

        return Ok(new { filePath, file.Length });
    }

    [HttpGet("download/{fileName}")]
    public IActionResult DownloadFile(string fileName)
    {
        var filePath = Path.Combine(_basePath, fileName);
        
        if (!System.IO.File.Exists(filePath))
            return NotFound();

        var fileStream = System.IO.File.OpenRead(filePath);
        return File(fileStream, "application/octet-stream", fileName);
    }

    [HttpGet("info/{fileName}")]
    public IActionResult GetFileInfo(string fileName)
    {
        var filePath = Path.Combine(_basePath, fileName);
        
        if (!System.IO.File.Exists(filePath))
            return NotFound();

        var fileInfo = new FileInfo(filePath);
        return Ok(new {
            fileName,
            fileInfo.Length,
            fileInfo.CreationTime,
            fileInfo.LastAccessTime
        });
    }

    [HttpDelete("delete/{fileName}")]
    public IActionResult DeleteFile(string fileName)
    {
        var filePath = Path.Combine(_basePath, fileName);
        
        if (!System.IO.File.Exists(filePath))
            return NotFound();

        System.IO.File.Delete(filePath);
        return NoContent();
    }
}

此控制器演示了四种文件操作:上传、下载、获取信息和删除。_basePath 字段存储用于文件存储的目录。

UploadFile 方法使用 IFormFile 处理文件上传。如果 Files 目录不存在,它会创建该目录并保存上传的文件。

DownloadFile 方法从磁盘读取文件并将其作为下载返回。File 辅助方法创建适当的响应。

GetFileInfo 方法使用 FileInfo 检索文件元数据。DeleteFile 方法演示了带正确存在性检查的文件删除。

所有方法都包含适当的错误处理并返回相应的 HTTP 状态码。该示例同时展示了同步和异步文件操作。

来源

Microsoft File 类文档

在本文中,我们探索了 ASP.NET 8 中的文件操作。File 类提供了强大的方法,可用于以跨平台的方式处理文件。

作者

我叫 Jan Bodnar,我是一名热情的程序员,拥有丰富的编程经验。我自 2007 年以来一直在撰写编程文章。至今,我已撰写了 1,400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

列出所有 ASP.NET 教程