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

news/2025/2/15 8:05:40/

        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");
        }
    }
}

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


http://www.ppmy.cn/news/1572187.html

相关文章

make命令学习

(make命令)代码变成可执行文件&#xff0c;叫做编译&#xff08;compile&#xff09;&#xff1b;先编译这个&#xff0c;还是先编译那个&#xff08;即编译的安排&#xff09;&#xff0c;叫做构建&#xff08;build&#xff09;。 make命令 一、make的概念二、Makefile文件的…

如何计算模型的FLOPs以全连接层为例

全连接层&#xff08;Fully Connected Layer&#xff0c;也称为稠密层或线性层&#xff09;的计算量公式是 输入特征数 输出特征数&#xff0c;这个公式的推导基于全连接层的数学运算方式。以下是详细的解释&#xff1a; 1. 全连接层的数学运算 全连接层的计算可以表示为矩阵…

日本股市概览:主要指数、经济泡沫与现代市场趋势(中英双语)

日本股市概览&#xff1a;主要指数、经济泡沫与现代市场趋势 日本作为全球第三大经济体&#xff0c;其股票市场在国际金融体系中占有重要地位。从战后经济奇迹到20世纪末的房地产泡沫破裂&#xff0c;再到近年来的经济复苏和结构性改革&#xff0c;日本股市经历了大起大落&…

Linux中退出vi编辑器的命令

在Linux中退出vi编辑器的命令有以下几种‌&#xff1a; ‌保存并退出‌&#xff1a;在命令模式下&#xff0c;按下Esc键退出插入模式&#xff0c;然后输入:wq或:x&#xff0c;按下回车键即可保存修改并退出vi编辑器‌。 ‌不保存退出‌&#xff1a;在命令模式下&#xff0c;按…

二、通义灵码插件保姆级教学-IDEA(使用篇)

一、IntelliJ IDEA 中使用指南 1.1、代码解释 选择需要解释的代码 —> 右键 —> 通义灵码 —> 解释代码 解释代码很详细&#xff0c;感觉很强大有木有&#xff0c;关键还会生成流程图&#xff0c;对程序员理解业务非常有帮忙&#xff0c;基本能做到哪里不懂点哪里。…

《图解设计模式》笔记(十)用类来表现

二十二、Command模式:命令也是类 一个类调用某方法,虽然调用结果会反映在对象的状态中,但不会留下工作的历史记录。 若有一个类表示“请进行这项工作”的“命令”,每一项想做的工作就不再是“方法的调用”这种动态处理了,而是一个表示命令的类的实例,即可以用“物”来表…

Spring Boot应用开发

一、了解Spring Boot Spring Boot是一个基于Spring框架的开源Java基础框架&#xff0c;它可以帮助我们快速开发独立的、基于生产级的基于Spring框架的应用程序。简单来说&#xff0c;它就像是一个“超级助手”&#xff0c;帮你把很多复杂的配置都简化了&#xff0c;让你能更轻…

基于Swift实现仿IOS闹钟

仿 iOS 系统闹钟 添加闹钟效果图 收到通知效果图 更新日志 2018.09.12 由于 iOS 系统限制了注册本地推送的数量&#xff0c;最大的注册量为 64 条&#xff0c;且一旦超出 64 条&#xff0c;所有的推送都将失效&#xff0c;故而在添加推送的时候做了一个判断&#xff0c;超过…