常遇到上传下载的功能,这里把我习惯的用法写下来:

上传:

string fileName = "";
fileName = this.fu_pic.FileName;
if (string.IsNullOrEmpty(fileName))
  isPic = "0";
else
  isPic = "1";

//附件不为空的时候上传图片,否则不处理
if (isPic == "1")
{
  byte[] arrayByte = this.fu_pic.FileBytes;
  if (arrayByte.Length <= 0)
  {
    //Page.ClientScript.RegisterStartupScript(this.GetType(), "", "<script>alert('上传图片是空文件!')</script>");
    AlertMessage("上传图片是空文件!");
    this.fu_pic.Focus();
    return;
  }

  string extention = fileName.Substring(fileName.LastIndexOf(".") + 1);
  if (extention.ToUpper() != "JPG"
                    && extention.ToUpper() != "BMP"
                    && extention.ToUpper() != "PNG"
                    && extention.ToUpper() != "GIF")
  {
    //Page.ClientScript.RegisterStartupScript(this.GetType(), "", "<script>alert('图片格式错误,请上传jpg/bmp/png/gif格式图片!')</script>");
    AlertMessage(@"图片格式错误,请上传jpg/bmp/png/gif格式图片!");
    this.fu_pic.Focus();
    return;
  }
  else
  {
    //按照年/月 生成文件目录
    fileName = string.Format(@"UploadImage\{0}\{3}\{1}{2}", DateTime.Now.Year.ToString(), DateTime.Now.ToString("yyyyMMddHHmmssfff"), fileName, DateTime.Now.Month.ToString());
    //获取附件上传物理路径(这里设置在config文件中)
    string dePath = ConfigurationManager.AppSettings["upload"].ToString();
    string filePath = Path.Combine(dePath, fileName);//Server.MapPath(@".." + fileName);//外面一层就是网站目录
    if (saveView(arrayByte, filePath))
    {
      //saveAttach = true;

    }
    else
    {
      //saveAttach = false;
      //Page.ClientScript.RegisterStartupScript(this.GetType(), "", "<script>alert('图片上传服务器失败!')</script>");
      AlertMessage("图片上传服务器失败!");
      this.fu_pic.Focus();
      return;
    }
  }
}

public bool saveView(byte[] arry_byte, string filePath)
    {
        bool rst = false;
        FileStream saveStream = null;
        try
        {
            //判断文件夹是否存在
            FileInfo file = new FileInfo(filePath);
            if (!file.Exists)
            {
                if (!Directory.Exists(file.DirectoryName))
                    Directory.CreateDirectory(file.DirectoryName);
            }
            file = null;

//保存文件
            saveStream = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite);
            saveStream.Write(arry_byte, 0, arry_byte.Length);
            saveStream.Close();
            rst = true;
        }
        catch (Exception)
        {
            rst = false;
        }

return rst;
    }

下载保存:

/// <summary>
        /// 下载服务端文件
        /// </summary>
        /// <param name="fileName">下载时客户端显示名称</param>
        /// <param name="filePath">服务端文件完全物理路径</param>
        /// <returns></returns>
        public void DownloadFile(string fileName, string filePath)
        {
            //服务端文件是否存在
            if (File.Exists(filePath))
            {
                FileInfo fi = new FileInfo(filePath);
                long length = fi.Length;

//读取文件到流sr中,using为防止文件被进程占据,强制释放资源
                using (FileStream sr = new FileStream(filePath, FileMode.Open))
                {
                    int startlength = 0;
                    int bufferSize = 1;
                    byte[] buffer = new byte[bufferSize];
                    byte[] allBuffer = new byte[length];

//循环读取流到allBuffer中
                    while (startlength < length)
                    {
                        //读取bytes个字节到buff中的0到bufferSize位置
                        //sr.read后,sr自动移动到读取的位置
                        int bytes = sr.Read(buffer, 0, bufferSize);

//将buff内容存入allBuffer中
                        allBuffer[startlength] = buffer[0];

//前进bytes个位置
                        startlength += bytes;
                    }

//清空缓存中的流
                    Response.Clear();
                    Response.ClearContent();
                    Response.ClearHeaders();

//输出流
                    Response.AddHeader("Accept-Ranges", "bytes");
                    Response.ContentType = "application/octet-stream";
                    Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(fileName, Encoding.GetEncoding("gb2312")));
                    Response.BinaryWrite(allBuffer);
                    Response.Flush();
                    Response.End();
                }
            }
        }

更加简洁的下载:

string fileName = "日志.txt";
            string txtFullFilePath = "c:/test/aa.txt";

if (File.Exists(Server.MapPath(txtFullFilePath)))
            {
                //文件对象
                FileInfo fileInfo = new FileInfo(Server.MapPath(txtFullFilePath));
                Response.Clear();
                Response.ClearContent();
                Response.ClearHeaders();
                Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(fileName));
                Response.AddHeader("Content-Length", fileInfo.Length.ToString());
                Response.AddHeader("Content-Transfer-Encoding", "binary");
                Response.ContentType = "application/octet-stream";
                Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
                Response.WriteFile(fileInfo.FullName);
                Response.Flush();
                Response.End();
            }

fileupload控件上传、文件下载的更多相关文章

  1. .net简单的fileupload控件上传

    前台代码: <asp:FileUpload ID="FileUpload1" runat="server" /> <asp:Button ID ...

  2. WebForm使用FileUpload控件上传压缩二进制图片

    fuImage 是FileUpload页面控件 ImageHelper.CompressionImage(fuImage.FileBytes, quality); /// <summary> ...

  3. asp.net FileUpload 控件上传文件 以二进制的形式存入数据库并将图片显示出来

    图片上传事件代码如下所示: byte[] binary = upload.FileBytes; StringBuilder sqlStrSb = new StringBuilder(); sqlStr ...

  4. asp:FileUpload 控件上传多文件

    <asp:FileUpload runat="server" ID="imgUpload" AllowMultiple="true" ...

  5. FileUpload的控件上传excel

    在一个使用FileUpload的控件上传excel,读取excel的数据 因为上传的路径一直被限定在C:\Program\IIS\Express 一直限制这个文件下, 想要解决这个问题. 在谷歌浏览器 ...

  6. MVC项目使用easyui的filebox控件上传文件

    开发环境:WIN10+IE11,浏览器请使用IE10或以上版本 开发技术框架MVC4+JQuery Easyui+knockoutjs 效果为弹出小窗体,如下图 1.前端cshtml文件代码(只包含文 ...

  7. JS ajaxfileUpload 一次性上传多个input控件 上传多个文件

    本方法适用于一次性上传多个input框输入的文件,如下图所示,任务是需要一次上传两个input框提供的两个文件. 具体方法: 1.修改ajax调用方法 如上图所示,只需要将ajaxFileUpload ...

  8. c#上传文件(一)使用 .net 控件上传文件

    1.html代码: <body> <form id="form1" runat="server"> <div> <as ...

  9. upload控件上传json文件合并的两种方法

    方法一: byte[] byte1 = FileUpload1.FileBytes; byte[] byte2 = FileUpload2.FileBytes; byte[] a1 = Encodin ...

随机推荐

  1. 用python实现k近邻算法

    用python写程序真的好舒服. code: import numpy as np def read_data(filename): '''读取文本数据,格式:特征1 特征2 -- 类别''' f=o ...

  2. C3p0的参数设置

    C3p0的参数设置:ComboPooledDataSource和BasicDataSource一样提供了一个用于关闭数据源的close()方法,这样我们就可以保证Spring容器关闭时数据源能够成功释 ...

  3. MySql从服务器延迟解决方案

    在从服务器上执行show slave status;可以查看到很多同步的参数,我们需要特别注意的参数如下:Master_Log_File:                      SLAVE中的I/ ...

  4. redis info 各信息意义

    redis_version:2.4.16 # Redis 的版本redis_git_sha1:00000000redis_git_dirty:0arch_bits:64multiplexing_api ...

  5. 李洪强漫谈iOS开发[C语言-018]-scanf函数

  6. *[topcoder]TheTree

    http://community.topcoder.com/stat?c=problem_statement&pm=12746&rd=15703 这道题有意思.给了树的根和每层节点的个 ...

  7. 让QT编译快一点(增加基础头文件)

    姚冬,中老年程序员 进藤光.杨个毛.欧阳修 等人赞同 我是来反对楼上某些答案的.我曾经用MFC写了金山词霸(大约20多万行),又用Qt写了YY语音(大约100多万行),算是对两种框架都比较有经验.纠正 ...

  8. 《ArcGIS Engine+C#实例开发教程》第五讲 鹰眼的实现

    原文:<ArcGIS Engine+C#实例开发教程>第五讲 鹰眼的实现 摘要:所谓的鹰眼,就是一个缩略地图,上面有一个矩形框,矩形框区域就是当前显示的地图区域,拖动矩形框可以改变当前地图 ...

  9. file_operations结构体解析 1

    注:学了这么长时间了,还没有好好看看 file_operations机构体,这其中还有很多的东西,当你学着学着的时候,就会用到这里面的一些系统调用对应的函数了,我在网上搜索之后,记录如下,一边将来查看 ...

  10. Wpf配置文件属性

    public MainWindow() { InitializeComponent(); this.WindowState = Properties.Settings.Default.WindowSt ...