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 @ 2021-10-29 17:16  青仙  阅读(110)  评论(0编辑  收藏  举报