6_文件上传和下载

单文件上传

如果要实现前端把文件上传到后台服务器,那表单要添加method="post" enctype="multipart/form-data" 属性,如:
<form id="form1" runat="server" method="post" enctype="multipart/form-data" >

然后前端设置一个文件上传标签即可
头像:<input type="file" name="headImg" />

后台服务器接收并且保存即可

//获得客户端上传文件的集合
                HttpFileCollection files = Request.Files;

                //根据下标拿到当前的文件对象(HttpPostedFile)
                HttpPostedFile file = files[0];//单文件上传,选第一个即可

                //file.ContentLength==0||  //file.FileName==""//用来判断是否有上传文件

                //file.ContentLength多用于判断上传的文件的大小,单位为字节

                //判断是否有文件
                if (file.FileName =="")
                {
                    Response.Write("<script>alert('没有文件');</script>");
                }

                //组装路径
                string path = "~/HeadImg/" + file.FileName;

                //将虚拟路径转为物理路径
                path = Server.MapPath(path);

                //保存
                file.SaveAs(path);



批量文件上传

首先前端就要用js脚本动态生成文件上传控件,比如:在一个div里生成即可:
$("#headdiv").append("<input type='file' name='headImg+" + i + "' />");

后台服务器循环进行保存即可

//统计上传的文件数量
                int count = 0;

                //循环文件集合
                for (int i = 0; i < Request.Files.Count; i++)
                {
                    //获取文集集合里的第i个文件对象
                    HttpPostedFile file = Request.Files[i];

					//可以通过file.ContentLength来判断文件的大小是否超额

                    //判断文件集合里的文件对象是否有文件
                    if (file.FileName=="")
                    {
                        Response.Write("这个文件对象里没有文件");
                        continue;
                    }

                    //组装路径
                    string path = "~/HeadImg/" + file.FileName;

                    //将虚拟路径转为物理路径
                    path = Server.MapPath(path);

                    //保存
                    file.SaveAs(path);

                    //计数++
                    count++;
                }

                Response.Write("成功上传"+count+"个文件");



修改每次上传文件的最大大小

web中上传文件默认大小最大估计是1M左右,如果超过了服务器就会报异常,可以在Webconfig配置文件里修改每次上传的最大文件大小

<system.web>节里添加一个<httpRuntime>节,比如:

控制用户上传文件最大为4M,最长时间为60秒,最多请求数为100 。
<httpRuntime executionTimeout="36000" delayNotificationTimeout="36000" maxRequestLength="2147483647" appRequestQueueLimit="100" targetFramework="4.5"></httpRuntime>



文件下载

得到需要提供给用户的文件的相对路径或者虚拟路径,
然后使用打开或者超链接的方式将用户指向路径即可。

下载方式:
1,使用超链接设置下载的虚拟路径实现下载

2,使用硬编码实现下载



if (Request["download"] == "下载")
                {

                    //下载的文件名
                    string FileName = "SQLQuery2.sql";

                    //虚拟路径
                    string path = @"~/HeadImg/" + FileName;

                    //转为可用路径
                    path = Server.MapPath(path);


                    byte[] buffer = null;

                    //第一步,创建FileStream的对象
                    using (FileStream fsWrite = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Read))
                    {


                        //创建字符数组缓冲区
                        buffer = new byte[fsWrite.Length];

                        //读取文件到字节数组中
                        fsWrite.Read(buffer, 0, buffer.Length);
                    }

                    //通知浏览器,文件是以附件形式下载,而不是直接打开,固定写法,
                    Response.AddHeader("Content-Disposition", "attachment;filename=" + FileName);

                    //将缓冲区的字节数组下载到本地
                    Response.BinaryWrite(buffer);


                    //结束对当前页的执行,否则会把当前页面的html内容写进你要下载的文件里面
                    Response.End();


                }
posted @   青仙  阅读(117)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示