【C# 功能总结 2】 C# 文件下载

在C#中实现文件下载功能通常涉及Web应用程序开发,尤其是使用ASP.NET Core或传统的ASP.NET Web Forms/MVC框架。以下是这两种框架下实现文件下载的基本步骤和示例代码。

使用ASP.NET Core进行文件下载

Controller部分

在控制器中提供一个动作方法让用户下载文件。

 

csharp

using Microsoft.AspNetCore.Mvc;
using System.IO;

public class FileDownloadController : Controller
{
    [HttpGet("download/{fileName}")]
    public IActionResult DownloadFile(string fileName)
    {
        // 定义文件路径
        var filePath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot/uploads", fileName);

        // 检查文件是否存在
        if (!System.IO.File.Exists(filePath))
        {
            return NotFound("File not found.");
        }

        // 读取文件字节
        var fileBytes = System.IO.File.ReadAllBytes(filePath);

        // 返回文件作为响应
        return File(fileBytes, GetContentType(fileName), fileName);
    }

    private string GetContentType(string fileName)
    {
        var types = GetMimeTypes();
        var ext = Path.GetExtension(fileName).ToLowerInvariant();
        return types.ContainsKey(ext) ? types[ext] : "application/octet-stream";
    }

    private static Dictionary<string, string> GetMimeTypes()
    {
        return new Dictionary<string, string>
        {
            { ".txt", "text/plain" },
            { ".pdf", "application/pdf" },
            { ".doc", "application/msword" },
            { ".docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document" },
            { ".xls", "application/vnd.ms-excel" },
            { ".xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" },
            { ".png", "image/png" },
            { ".jpg", "image/jpeg" },
            { ".jpeg", "image/jpeg" },
            { ".gif", "image/gif" }
        };
    }
}

使用传统ASP.NET MVC进行文件下载

Controller部分

提供一个动作方法让用户下载文件。

 

csharp

using System.IO;
using System.Web.Mvc;

public class HomeController : Controller
{
    [HttpGet]
    public ActionResult DownloadFile(string fileName)
    {
        // 定义文件路径
        var filePath = Server.MapPath($"~/App_Data/uploads/{fileName}");

        // 检查文件是否存在
        if (!System.IO.File.Exists(filePath))
        {
            return HttpNotFound("File not found.");
        }

        // 读取文件字节
        var fileBytes = System.IO.File.ReadAllBytes(filePath);

        // 返回文件作为响应
        return File(fileBytes, GetContentType(fileName), fileName);
    }

    private string GetContentType(string fileName)
    {
        var types = GetMimeTypes();
        var ext = Path.GetExtension(fileName).ToLowerInvariant();
        return types.ContainsKey(ext) ? types[ext] : "application/octet-stream";
    }

    private static Dictionary<string, string> GetMimeTypes()
    {
        return new Dictionary<string, string>
        {
            { ".txt", "text/plain" },
            { ".pdf", "application/pdf" },
            { ".doc", "application/msword" },
            { ".docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document" },
            { ".xls", "application/vnd.ms-excel" },
            { ".xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" },
            { ".png", "image/png" },
            { ".jpg", "image/jpeg" },
            { ".jpeg", "image/jpeg" },
            { ".gif", "image/gif" }
        };
    }
}

注意事项

  1. 文件存在性检查: 在返回文件之前,确保文件存在于指定路径中。
  2. 内容类型设置: 正确设置文件的内容类型,以便浏览器能够正确处理文件。
  3. 错误处理: 添加适当的错误处理逻辑,以便在文件不存在或其他错误发生时向用户提供有意义的反馈。

通过以上步骤和示例代码,您可以在ASP.NET Core和传统ASP.NET MVC应用程序中实现文件下载功能。根据具体需求,您可以进一步扩展和优化这些代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路飞VS草帽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值