首页 > 编程语言 >c# 实现文件上传下载功能的实例代码

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

时间:2023-11-01 11:44:48浏览次数:33  
标签:文件 c# 上传下载 实例 file Path path 上传 代码

实现文件上传和下载功能是很常见的需求,在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/

欢迎入群一起讨论

 

 

标签:文件,c#,上传下载,实例,file,Path,path,上传,代码
From: https://www.cnblogs.com/songsu/p/17802720.html

相关文章

  • Convolutional neural network (CNN)–extreme learning machine (ELM)
    1.介绍论文:(2020)Neuralnetworksforfacialageestimation:asurveyonrecentadvances.地址:http://link.springer.com/article/10.1007/s10462-019-09765-w针对问题:软生物识别技术在现实世界中的应用日益增多,已成为研究人员感兴趣的一个新领域。它包括对年龄、性别、伤疤、......
  • 无涯教程-React Native - 环境设置
    您需要安装几件事来为ReactNative设置环境。我们将使用OSX作为构建平台。步骤1-安装create-react-native-app在系统中成功安装NodeJS和NPM之后,您可以继续安装create-react-native-app(全局显示如下)。C:\Users\Learnfk>npminstall-gcreate-react-native-app步骤2-创......
  • CodeGeeX vscode代码提示,智能问答
    CodeGeeX官网https://codegeex.cn/zh-CN/CodeGeeXvscode代码提示,智能问答---------------------------------------------生活的意义就是你自己知道你要做什么,明确目标。没有目标,后面都是瞎扯!https://pengchenggang.gitee.io/navigator/SMART原则:目标必须是具体的(Spec......
  • import.meta.globEager('./src/components/**/*.vue'); 遍历文件
    main.jsconstimportAll=(modules)=>{Object.keys(modules).forEach((key)=>{constcomponent=key.replace('/src/','@/').replace('.vue','');constcomponentName=key.split('/').slice(......
  • 通过 TCPView 还发现个流氓 KPKIService.exe 删掉
    叫统一安全中间件,就是个第三方做的key的安全检查,谁知道是哪年装的资料https://baijiahao.baidu.com/s?id=1717384219148345375&wfr=spider&for=pc---------------------------------------------生活的意义就是你自己知道你要做什么,明确目标。没有目标,后面都是瞎扯!https://p......
  • c语言学习(结构体初始化)42
    利用例题直接阐释:#define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>structhobby//hobby:爱好{charcolor[10];charsports[10];};structstu{charname[10];intage;structhobbys2;doubleheight;};intmain(){structstu......
  • centos7yum安装syslog-ng
    1.安装epel源yum-yinstallhttps://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm2.安装syslog-ngyum-yinstallsyslog-ng3.修改syslog-ng配置文件vim/etc/syslog-ng/syslog-ng.conf 4、syslog-ng配置文件详解vim/etc/syslog-ng/syslog-ng.conf1.optio......
  • Windows ObjectType Hook 之 OpenProcedure
    1、背景  ObjectTypeHook是基于ObjectType的一种深入的Hook,比起常用的SSDTHook更为深入。  有关ObjectType的分析见文章《Windows驱动开发学习记录-ObjectTypeHook之ObjectType结构相关分析》。  这里进行的Hook为其中之一的OpenProcedure。文章分两部......
  • 实验3_c语言函数应用编程
    task1#include<stdio.h>#include<stdlib.h>#include<time.h>#include<windows.h>#defineN80voidprint_text(intline,intcol,chartext[]);voidprint_spaces(intn);voidprint_blank_lines(intn);intmain(){intline,col......
  • C#简介(持续更新)
    写本篇文章的目的,开始只是为了帮助自己记忆学习C#知识的过程,慢慢的发现,这个方式也挺好的,同时自己也学到了不少,另外还提高了自己的打字速度,何乐而不为?一、.NetFramework框架是什么东西?.NETFramework框架是一个由微软设计和开发的软件框架,主要用来开发可以在Windows平台上运行的......