使用Ajax和一般处理程序实现文件上传与下载
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和一般处理程序实现文件上传与下载的更多相关文章
- MVC文件上传与下载
MVC文件上传与下载 MVC文件上传与下载 想想自己从毕业到工作也有一年多,以前公司的任务的比较重,项目中有的时候需要用到什么东西都去搜索一下,基础知识感觉还没有以前在学校中的好.最近开始写博客,真的 ...
- SpringBoot整合阿里云OSS文件上传、下载、查看、删除
1. 开发前准备 1.1 前置知识 java基础以及SpringBoot简单基础知识即可. 1.2 环境参数 开发工具:IDEA 基础环境:Maven+JDK8 所用技术:SpringBoot.lom ...
- JavaServlet的文件上传和下载
关于JSP中的文件上传和下载操作 先分析一下上传文件的流程 1-先通过前段页面中的选择文件选择要上传的图片 index.jsp <%@ page language="java" ...
- Struts2学习总结——文件上传与下载
Struts2文件上传与下载 1.1.1新建一个Maven项目(demo02) 在此添加Web构面以及 struts2 构面 1.2.1配置Maven依赖(pom.xml 文件) <?xml v ...
- [实战]MVC5+EF6+MySql企业网盘实战(18)——文件上传,下载,修改
写在前面 经过一段时间的秀秀改改,终于把文件上传下载,修改文件夹文件名称的功能实现了. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战]MVC5+EF6+MySql企 ...
- JavaWeb:实现文件上传与下载
JavaWeb:实现文件上传与下载 文件上传前端处理 本模块使用到的前端Ajax库为Axio,其地址为GitHub官网. 关于文件上传 上传文件就是把客户端的文件发送给服务器端. 在常见情况(不包含文 ...
- koa2基于stream(流)进行文件上传和下载
阅读目录 一:上传文件(包括单个文件或多个文件上传) 二:下载文件 回到顶部 一:上传文件(包括单个文件或多个文件上传) 在之前一篇文章,我们了解到nodejs中的流的概念,也了解到了使用流的优点,具 ...
- javaWeb文件上传与下载
文件上传与下载在项目中运用的使用频率很大 今天也花时间整理了一下 多文件上传图片回显 和文件下载 1.多文件上传 这里会涉及到几个属性 fileSizeThreshold:缓冲区文件的大小 如果上传 ...
- vue+axios+elementUI文件上传与下载
vue+axios+elementUI文件上传与下载 Simple_Learn 关注 0.5 2018.05.30 10:20 字数 209 阅读 15111评论 4喜欢 6 1.文件上传 这里主要 ...
随机推荐
- intellij idea 中右键项目没有git
1.没有GIT选项说明还没有关联你的仓库 2.ctrl + alt +s 打开VersionControl添加git仓库 3.添加后再次查看,GIT就出现了 4.可以查看历史版本了. 原文地址:htt ...
- vmware vcsa-故障1
1.重启vcsa后不能登陆webclient 做实验得时候重启vcsa后不能登陆 web client 开启vcsa直接进入命令模式,命令行登陆后提示:failed to connect to se ...
- Ubuntu下添加定时任务执行php文件
//添加自动下载定时任务1. vim /etc/crontab2. 添加 #每5分钟执行一次*/5 * * * * root /usr/bin/php /home/wwwroot/123.php3. ...
- CSS3Ps -Photoshop图层特效转CSS3代码
CSS3Ps 这个ps插件可以将ps图层特效直接转化成css3代码,对前端非常有益. 插件下载:http://css3ps.com/Download/
- pymysql操作mysql数据库
1.建库 import pymysql # 建库 try: conn=pymysql.connect( host='127.0.0.1', port=3306, user='root', passwd ...
- window事件
window事件是较为重要的事件,接下来就讲解一下. 1.获取页面滚动栏的距离 什么是滚动栏,就是网页内容过多时,通过滚轮控制上下显示或者左右显示: 为窗口添加滚动条事件: window.onscro ...
- python与mysql的数据交互
一 Python 中操作 MySQL 步骤 1.1 安装pymysql命令 sudo pip3 install pymysql 安装软件:sudo apt-get install 软件名称 安装模块: ...
- 记录java+testng运行selenium(二)---定义元素类及浏览器
一: 元素类 整体思路: 1. 根据状态可分可见和不可见两种 2. 同一个路径可以查找单个元素或多个元素 3. 获取元素text或者指定的value值 4. selenium对元素操作有两种,一是通过 ...
- linux网络编程之posix线程(一)
今天继续学习posix IPC相关的东东,消息队列和共享内存已经学习过,接下来学习线程相关的知识,下面开始: [注意]:创建失败这时会返回错误码,而通常函数创建失败都会返回-1,然后错误码会保存在er ...
- python中部分数据类型及其使用方法
1.数据类型: int:整数 str:字符串,一般不存放大量的数据 bool:布尔值,用来判断 只有两个值 True False list:列表,用来存放大量数据[]来表示,里面可以放任何数据类型 ...