C#实现文件上传下载

文件下载

 //指定文件MIME类型
            Response.ContentType = "application/msword";
            //下载头指令
            Response.AddHeader("Content-Disposition", "attchment;filename=c#基础概念.doc");


            //Response.WriteFile("files/1.doc");//将文件直接写入到http响应输出流


            //Response.Flush();//向客户端发送当前缓冲的所有输出


            //下载大文件应该用流操作
            Stream st = Response.OutputStream;//http响应输出流(文件的数据最初在服务器端,最终写入到st中)


            FileStream fs = new FileStream(Server.MapPath("files/1.doc"), FileMode.Open, FileAccess.Read, FileShare.Read);


            byte[] buffer=new byte[1024];
            int count;//每次真正读取到的字节数
            while((count=fs.Read(buffer,0,1024))>0)
            {
                //读到数据(数据目前在缓冲区)
                //把缓冲区里面的数据写入到st中
                st.Write(buffer, 0, count);
                //发送数据
                st.Flush();//清空缓冲区,把数据发送到客户端
            }
            fs.Flush();
            fs.Close();
            st.Close();



文件上传



            //做文件操作,form标记必须有enctype="multipart/form-data"属性(ASP.NET会自动生成,但HTML控件必须手动添加)
            HttpPostedFile hpf = FileUpload1.PostedFile;//获取上传的文件
            //获取上传文件的大小
            int len = hpf.ContentLength;//注意:以字节为单位


            string type = hpf.ContentType;//上传文件的MIME类型


            string fileName = Path.GetFileName(hpf.FileName);
            Response.Write("文件大小:" + len + "
" + "MIME类型:" + type + "
" + "文件名:" + fileName);


            //保存路径
            //保存文件的全路径不能重名,否则,后上传的会覆盖前面的
            string path = "UpLoadFiles\\" + DateTime.Now.Ticks + fileName;
            //开始上传


            //FileUpload1.SaveAs(Server.MapPath(path));//SaveAs 方法是一次性把文件上传到服务器,不适合大文件上传,可能把服务器卡死
            //应该用流来上传大文件
            Stream s = hpf.InputStream;//把文件的数据读取到st流中


            //创建一个文件流来把上传的文件写入到服务器上
            FileStream fs = new FileStream(path,FileMode.Create,FileAccess.Write,FileShare.Read);
            byte[] buffer=new byte[1024];//缓冲区
            int readLen;//每次真正读取到的字节数
            while ((readLen=s.Read(buffer, 0, 1024))>0) 
            {
                //读到数据了(此时独到的数据在buffer缓冲区中)
                //开始把文件写入到服务器的磁盘中


                fs.Write(buffer, 0, readLen);
            }


            fs.Flush();//请空缓冲区,使得所有缓冲区的数据都写入到文件中
            s.Flush();
            fs.Close();//关闭流,释放资源
            s.Close();



多文件上传

 //获取用户发送过来的文件集合
           HttpFileCollection hfc= Request.Files;
            //多文件上传,还是要把文件一个一个的写入到服务器磁盘
           foreach (string fKey in hfc)
           {
               //循环遍历所有文件的集合,得到的是文件对应的KEY,也就是"name"属性
               //Response.Write(fKey);
               HttpPostedFile hpf= hfc[fKey];//根据key获取对应的文件


               //只能上传图片(.jpg,.bmp,.png)
               //注意:有的文件上传控件可能没有选择文件
               string type = Path.GetExtension(hpf.FileName).ToUpper();




               string fileName = Path.GetFileName(hpf.FileName);


               if (fileName=="")
               {
                   Response.Write(fKey+"没有上传文件");
                   
               }
               else
               {


                   if (type == ".JPG" || type == ".BMP" || type == ".PNG")
                   {
                       
                       //设置保存路径
                       string path = Server.MapPath("UpLoadFiles\\" + DateTime.Now.Ticks + fileName);


                       Stream s = hpf.InputStream;//把文件的数据读取到st流中


                       //创建一个文件流来把上传的文件写入到服务器上
                       FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.Read);
                       byte[] buffer = new byte[1024];//缓冲区
                       int readLen;//每次真正读取到的字节数
                       while ((readLen = s.Read(buffer, 0, 1024)) > 0)
                       {
                           //读到数据了(此时独到的数据在buffer缓冲区中)
                           //开始把文件写入到服务器的磁盘中


                           fs.Write(buffer, 0, readLen);
                       }


                       fs.Flush();//请空缓冲区,使得所有缓冲区的数据都写入到文件中
                       s.Flush();
                       fs.Close();//关闭流,释放资源
                       s.Close();
                       Response.Write("上传成功");
                   }
                   else
                   {
                       Response.Write(type + "不是图片格式");
                   }
                  
                  
               }


            

你可能感兴趣的:(.NET系统课程)