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");
}
}
}
如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。