c# 实现文件上传下载功能的实例代码

实现文件上传和下载功能是很常见的需求,在C#中实现这样的功能并不困难。

上传文件
实现过程
选择一个合适的 form 布局,使得用户可以方便地选择文件,并设计好交互流程。

在后台代码中,需要通过 HttpPostedFileBase 类型接收表单上传的文件。可以通过以下代码来实现文件上传的操作:

[HttpPost]
public ActionResult Upload(HttpPostedFileBase file)
{
    if (file != null && file.ContentLength > 0) 
    {
        var fileName = Path.GetFileName(file.FileName);
        var path = Path.Combine(Server.MapPath("~/App_Data/uploads"), fileName);
        file.SaveAs(path);
    }
    return RedirectToAction("Index");
}

代码中的 HttpPostedFileBase 为ASP.NET MVC框架中的上传文件数据类型,通过判断文件是否为空以及大小是否大于0来确认上传的文件是否有效。接着通过 Path.GetFileName() 方法和 Server.MapPath() 方法生成保存路径。最后使用 SaveAs() 方法保存文件即可。

示例说明
以下是一个示例代码,其中包含了从表单上传文件、创建文件并保存至磁盘、用户拒绝上传操作等实例:

[HttpPost]
public ActionResult FileUpload(HttpPostedFileBase file)
{
    if (file != null && file.ContentLength > 0) 
    {
        try
        {
            var path = Path.Combine(Server.MapPath("~/App_Data/uploads"),
                       Path.GetFileName(file.FileName));
            file.SaveAs(path);
            ViewBag.Message = "File uploaded successfully";
        }
        catch (Exception ex)
        {
            ViewBag.Message = "Error: " + ex.Message.ToString();
        }
    }
    else
    {
        ViewBag.Message = "You have not specified a file.";
    }
    return View();
}

下载文件
实现过程
查找已经上传的文件并获取该文件的绝对路径。可以使用 FileResult() 方法,该方法可以将文件返回给客户端:

public FileResult Download(string fileName)
{
    var path = Path.Combine(Server.MapPath("~/App_Data/uploads"), fileName);
    return File(path, "application/force-download", Path.GetFileName(path));
}

该代码将指定文件路径,文件类型、以及文件名传递给 File() 方法作为参数,返回一个文件下载流,当客户端请求下载时将自动下载文件。

示例说明
以下代码给出了如何进行文件下载的实例代码,其中通过文件名参数获取已上传文件的绝对路径并且将文件返回:

public FileResult Download(string fileName)
{
    var path = Path.Combine(Server.MapPath("~/App_Data/uploads"), fileName);
    return File(path, "application/force-download", Path.GetFileName(path));
}

总结
以上,就是实现文件上传和下载的完整攻略,包括实现过程和示例代码。在我们进行开发过程中,还需要注意一些安全性问题,如文件扩展名白名单验证等等。

参考文章:http://blog.ncmem.com/wordpress/2023/11/01/c-%e5%ae%9e%e7%8e%b0%e6%96%87%e4%bb%b6%e4%b8%8a%e4%bc%a0%e4%b8%8b%e8%bd%bd%e5%8a%9f%e8%83%bd%e7%9a%84%e5%ae%9e%e4%be%8b%e4%bb%a3%e7%a0%81/
欢迎入群一起讨论

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是实现上传文件接口的示例代码,同时附带调用示例和注释: ```csharp // 文件上传处理接口 [HttpPost("upload")] public async Task<IActionResult> Upload(IFormFile file) { // 判断文件是否为空 if (file == null || file.Length == 0) return BadRequest("文件为空"); // 生成文件名 var fileName = Guid.NewGuid().ToString() + Path.GetExtension(file.FileName); // 拼接文件保存路径 var filePath = Path.Combine(_env.WebRootPath, "uploads", fileName); // 保存文件到指定路径 using (var stream = new FileStream(filePath, FileMode.Create)) { await file.CopyToAsync(stream); } // 返回上传成功信息 return Ok(new { fileName }); } ``` 上述代码实现了一个基本的文件上传接口,接收客户端传来的文件,保存到指定目录下,并返回文件名给客户端。下面是一个调用该接口的示例: ```csharp using System.IO; using System.Net.Http; using System.Threading.Tasks; public async Task UploadFile(string filePath) { // 创建 HttpClient 实例 using var client = new HttpClient(); // 创建一个表单数据对象 using var formData = new MultipartFormDataContent(); // 添加文件流到表单数据对象 using var fileStream = new FileStream(filePath, FileMode.Open); formData.Add(new StreamContent(fileStream), "file", Path.GetFileName(filePath)); // 发送 HTTP POST 请求,并获取响应结果 using var response = await client.PostAsync("https://example.com/api/upload", formData); var result = await response.Content.ReadAsStringAsync(); // 输出响应结果 Console.WriteLine(result); } ``` 上述代码演示了如何使用 HttpClient 发送一个文件上传请求,其中 `filePath` 参数为本地文件路径,需要注意的是,该示例代码需要在 .NET Core 3.0 或更高版本的控制台应用程序中运行,因为它使用了 C# 8.0 的新特性。最后,附上上述代码的注释,以供参考: ```csharp using System.IO; using System.Net.Http; using System.Threading.Tasks; public async Task UploadFile(string filePath) { // 创建 HttpClient 实例 using var client = new HttpClient(); // 创建一个表单数据对象 using var formData = new MultipartFormDataContent(); // 添加文件流到表单数据对象 using var fileStream = new FileStream(filePath, FileMode.Open); formData.Add(new StreamContent(fileStream), "file", Path.GetFileName(filePath)); // 发送 HTTP POST 请求,并获取响应结果 using var response = await client.PostAsync("https://example.com/api/upload", formData); var result = await response.Content.ReadAsStringAsync(); // 输出响应结果 Console.WriteLine(result); } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值