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();
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .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语句:使用策略模式优化代码结构