ASP.NET Core 使用 FileStream 将 FileResult 文件发送到浏览器后删除该文件

FileStream 在向浏览器发送文件时节省了服务器内存和资源,但如果需要删除文件怎么办?本文介绍如何在发送文件后删除文件;用 C# 编写。

另请参阅:位图创建和下载

使用FileStream向浏览器发送数据效率更高,因为文件是从驱动器复制到浏览器,而不是将其加载到服务器的内存中,然后复制到客户端。但如果文件下载到浏览器后需要删除怎么办?关键是"重写"类Dispose()的方法FileStream。

此代码与.NET Core 3.1、.NET 5、.NET 6、.NET 7 和.NET 8兼容。

以下是从基本 Web 应用程序修改后的 HomeController.cs 文件:

// HomeController.cs

using Microsoft.AspNetCore.Mvc;

namespace WebApplication1.Controllers

{

internal class FileStreamDelete : FileStream

{

readonly string path;

public FileStreamDelete(string path, FileMode mode) : base(path, mode) // NOTE: must create all the constructors needed first

{

this.path = path;

}

protected override void Dispose(bool disposing) // NOTE: override the Dispose() method to delete the file after all is said and done

{

base.Dispose(disposing);

if (disposing)

{

if (System.IO.File.Exists(path))

System.IO.File.Delete(path);

}

}

}

public class HomeController : Controller

{

public async Task<IActionResult> Index(CancellationToken cancel)

{

// NOTE: the file that will be created, sent to the browser and then permanently deleted

string filename = "temp.txt"; // NOTE: use System.Guid.NewGuid() to generate a unique file name

// NOTE: create the text file

await System.IO.File.AppendAllTextAsync(filename, "THIS IS A TEST. THIS IS A TEST. THIS IS A TEST. THIS IS A TEST. THIS IS A TEST. THIS IS A TEST. THIS IS A TEST. THIS IS A TEST. THIS IS A TEST. THIS IS A TEST. THIS IS A TEST. THIS IS A TEST. THIS IS A TEST. THIS IS A TEST.", cancel);

// NOTE: send the text file to the browser and watch it be deleted upon completion of the copy operation

return File(new FileStreamDelete(filename, FileMode.Open), System.Net.Mime.MediaTypeNames.Text.Plain, "downloaded-file.txt");

}

}

}

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。

相关推荐
William_cl2 天前
C# ASP.NET Controller 核心:ViewResult 实战指南(return View (model) 全解析)
开发语言·c#·asp.net
周杰伦fans2 天前
CommunityToolkit.Mvvm(又称MVVM Toolkit) 与 MvvmLight 的核心区别
开发语言·c#·.netcore
William_cl2 天前
C# ASP.NET Controller 核心:PartialViewResult 实战指南(AJAX 局部刷新全解析)
ajax·c#·asp.net
毕设源码-钟学长3 天前
【开题答辩全过程】以 基于ASP.NET的药店中草药管理系统的设计与实现为例,包含答辩的问题和答案
后端·asp.net
William_cl4 天前
【ASP.NET进阶】Controller 层基础:从 MVC 5 到 Core,继承的奥秘与避坑指南
后端·asp.net·mvc
时光追逐者5 天前
C#/.NET/.NET Core技术前沿周刊 | 第 61 期(2025年11.10-11.16)
c#·.net·.netcore
William_cl6 天前
【ASP.NET进阶】Controller层核心:Action方法全解析,从基础到避坑
后端·asp.net
夏霞6 天前
c# ASP.NET Core SignalR 客户端与服务端自动重连配置指南
开发语言·c#·asp.net
ejinxian6 天前
ASP.NET Core 10
后端·asp.net·core 10
前端世界7 天前
从零搭建 ASP.NET 单文件 Web 项目:一个能真用的 BookShop 管理页实战
服务器·前端·asp.net