1.使用HTML的input标签

    <input type="file" multiple="multiple" id="file_load" />

  2.使用JS为input的file添加一个change事件

      $('#file_load').change(function () {
      var fileObj = document.getElementById("file_load").files; // js 获取文件对象
      if (typeof (fileObj) == "undefined" || fileObj.size <= 0) {
      alert("请选择文件");
      return;
        }
      if (fileObj.length > 10) {   //因本人项目需求、一次最多上传的文件个数不能超过10个
      alert("一次上传文件不能超过10个");  
        return;
        }
      var formData = new FormData();   //FormData专门用来给ajax向后台传递文件用的
      formData.append("action", "FileLoad");//向后台传递值、是键值对的形式
      for (var i = 1; i <= fileObj.length; i++) {
      formData.append("file", fileObj[i]); //向formData 里追加文件
      }
      $.ajax({
      url: "../Method/FileUpload.ashx",
      type: "post",
      cache: false,
      data: formData,
      dataType: 'json',  //这里采用json格式向后台传递数据、如果后台需要返回信息也必须返回json数据 只有这样ajax的回调函数才能接收到后台传过来的值
      cache: false,//上传文件无需缓存
      processData: false,//用于对data参数进行序列化处理 这里必须false
      contentType: false, 
      success: function (data) {
      if (data == 'OK') {

      //上传完成
      };
    }
   }
});
});

  3.一般处理程序(上传)

    public void FileLoad(HttpContext context)

    {
      string path = "";//文件保存路径
      for (int i = 0; i < context.Request.Files.Count; i++)
      {
        HttpPostedFile file = context.Request.Files[i];
        path = context.Server.MapPath("~/File/" + file.FileName);
        file.SaveAs(path);
      }
    //返回json数据
    JavaScriptSerializer js = new JavaScriptSerializer();
    context.Response.Write(js.Serialize("OK"));
    }

    

    

  4.文件下载前端

  我这里不方便使用项目中的代码,所以就简单写个Demo

   <a href="../Method/FileDowload.ashx?action=DowFile&filename=1.txt">下载</a>   直接使用a标签访问一般处理程序,带两个参数 分别为需要请求的方法和需要下载的文件名称

action=DowFile、filename=1.txt

  

  

 4.一般处理程序(下载)

  public void DowFile(HttpContext context)
  {
    string filename = context.Request["filename"].ToString();    //文件名称就是前端传来的filename这个参数
    string path = "~/File/" + filename;
    System.IO.FileInfo file = new System.IO.FileInfo(System.Web.HttpContext.Current.Server.MapPath(path));
    context.Response.Clear();
    context.Response.Charset = "UTF-8";
    context.Response.ContentEncoding = System.Text.Encoding.UTF8;
    context.Response.AddHeader("Content-Type", "application/octet-stream");
              // 添加头信息,为"文件下载/另存为"对话框指定默认文件名,设定编码为UTF8,防止中文文件名出现乱码
              context.Response.AddHeader("Content-Disposition", "attachment; filename=" + System.Web.HttpUtility.UrlEncode(file.Name, System.Text.Encoding.UTF8));
             // 添加头信息,指定文件大小,让浏览器能够显示下载进度
             context.Response.AddHeader("Content-Length", file.Length.ToString());
             //// 指定返回的是一个不能被客户端读取的流,必须被下载
             context.Response.ContentType = "application/ms-excel";
             // 把文件流发送到客户端
             context.Response.WriteFile(path);
             // 停止页面的执行
             context.Response.End();
          }

我这个是在项目的跟目录里创建了一个文件夹File。<input type="file" multiple="multiple" id="file_load" />标签的默认样式改法有很多  百度上有

使用Ajax和一般处理程序实现文件上传与下载的更多相关文章

  1. MVC文件上传与下载

    MVC文件上传与下载 MVC文件上传与下载 想想自己从毕业到工作也有一年多,以前公司的任务的比较重,项目中有的时候需要用到什么东西都去搜索一下,基础知识感觉还没有以前在学校中的好.最近开始写博客,真的 ...

  2. SpringBoot整合阿里云OSS文件上传、下载、查看、删除

    1. 开发前准备 1.1 前置知识 java基础以及SpringBoot简单基础知识即可. 1.2 环境参数 开发工具:IDEA 基础环境:Maven+JDK8 所用技术:SpringBoot.lom ...

  3. JavaServlet的文件上传和下载

    关于JSP中的文件上传和下载操作 先分析一下上传文件的流程 1-先通过前段页面中的选择文件选择要上传的图片 index.jsp <%@ page language="java" ...

  4. Struts2学习总结——文件上传与下载

    Struts2文件上传与下载 1.1.1新建一个Maven项目(demo02) 在此添加Web构面以及 struts2 构面 1.2.1配置Maven依赖(pom.xml 文件) <?xml v ...

  5. [实战]MVC5+EF6+MySql企业网盘实战(18)——文件上传,下载,修改

    写在前面 经过一段时间的秀秀改改,终于把文件上传下载,修改文件夹文件名称的功能实现了. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战]MVC5+EF6+MySql企 ...

  6. JavaWeb:实现文件上传与下载

    JavaWeb:实现文件上传与下载 文件上传前端处理 本模块使用到的前端Ajax库为Axio,其地址为GitHub官网. 关于文件上传 上传文件就是把客户端的文件发送给服务器端. 在常见情况(不包含文 ...

  7. koa2基于stream(流)进行文件上传和下载

    阅读目录 一:上传文件(包括单个文件或多个文件上传) 二:下载文件 回到顶部 一:上传文件(包括单个文件或多个文件上传) 在之前一篇文章,我们了解到nodejs中的流的概念,也了解到了使用流的优点,具 ...

  8. javaWeb文件上传与下载

    文件上传与下载在项目中运用的使用频率很大 今天也花时间整理了一下 多文件上传图片回显 和文件下载  1.多文件上传 这里会涉及到几个属性 fileSizeThreshold:缓冲区文件的大小 如果上传 ...

  9. vue+axios+elementUI文件上传与下载

    vue+axios+elementUI文件上传与下载 Simple_Learn 关注  0.5 2018.05.30 10:20 字数 209 阅读 15111评论 4喜欢 6 1.文件上传 这里主要 ...

随机推荐

  1. PowerBuilder学习笔记之删除和加载PBL文件的方法

    删除PBL目录的方法:直接点删除键删除 加载PBL文件的方法:点Browse按钮选择PBL文件

  2. shiro登录验证简单理解

    这两天接手了下师兄的项目,要给系统加个日志管理模块,其中需要记录登录功能的日志,那么首先要知道系统的登录是在哪里实现验证的. 该系统把所有登录验证还有权限控制的工作都交给了shiro. 这篇文章就先简 ...

  3. hdu 2102 a计划问题。。 双层dfs问题

    Problem Description 可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸的她再一次面临生命的考验.魔王已经发出消息说将在T时刻吃掉公主,因为他听信谣言说吃公主的肉也能长 ...

  4. 在论坛中出现的比较难的sql问题:37(动态行转列 某一行数据转为列名)

    原文:在论坛中出现的比较难的sql问题:37(动态行转列 某一行数据转为列名) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.

  5. Oracle触发器编译错误及解决方案

    错误 TRIGGER **** 编译错误 错误:PLS-00103: 出现符号 "END"在需要下列之一时:        ( begin case declare exit    ...

  6. 洛谷P3372--线段树代码模板1

    如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.求出某区间每一个数的和 输入格式 第一行包含两个整数N.M,分别表示该数列数字的个数和操作的总个数. 第二行包含N个用空格 ...

  7. J.U.C之AQS:阻塞和唤醒线程

    此篇博客所有源码均来自JDK 1.8 在线程获取同步状态时如果获取失败,则加入CLH同步队列,通过通过自旋的方式不断获取同步状态,但是在自旋的过程中则需要判断当前线程是否需要阻塞,其主要方法在acqu ...

  8. pdm文件打开方式

    转自:https://blog.csdn.net/qq_36855191/article/details/79299216 pdm打开网站:http://www.dmanywhere.cn/

  9. AE开发—利用IQueryFilter接口进行属性查询

    在ArcGis Engine二次开发过程中,经常会需要用到查询统计的功能,而IQueryFilter是最常见的属性字段查询接口,可以用来做一些简单的查询工作. 现在有一些公交站点和公交路线的数据,可视 ...

  10. Xshell 上传文件到Ubuntu

    打开Xshell,连上一台Linux服务器或者是虚拟机 如果要方便的上传文件,需要rz 先测试是否安装rz 命令行~$ rz 如果出现未安装(或者command not found)且建议sudo a ...