Day10 上传和下载
上传
将本地文件传输到服务器
jsp:
文件上传的请求方式必须是post
input的type必须是file
enctype="multipart/form-data" <form action="upload" method="post" enctype="multipart/form-data">
<input type="file" name="upload"><br/>
<input type="submit" value="上传">
</form> servlet:
//1.设置编码
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//2.读(流)
InputStream is = request.getInputStream();//从请求中获取流
//3.写(写到upload的文件夹下)
//路径:在服务器中位置
String path = request.getServletContext().getRealPath("/upload");
OutputStream out = new FileOutputStream(new File(path,"a.txt")); byte[] buf = new byte[1024];
int data = -1;
while((data=is.read(buf)) != -1){
out.write(buf, 0, data);
}
//释放资源
out.close();
is.close();
System.out.println("上传完成"); 浏览器标志信息:
------WebKitFormBoundarytd2doI29GpOG23VA
Content-Disposition: form-data; name="upload"; filename="分包.txt"
Content-Type: text/plain
获取请求头信息比较麻烦 上传框架:
comms-upload.jar apache
comms-io.jar 1. 导入jar
2. 编写jsp表单
3. servlet
//fileItemFactory工厂:配置(缓冲区的大小,临时文件存放目录)
DiskFileItemFactory factory = new DiskFileItemFactory();
//临时文件存放目录
factory.setRepository(new File("c:/"));
//设置缓冲区大小
factory.setSizeThreshold(1024*1024); //解析请求(获取所有的表单元素(普通表单元素/文件表单元素))
//ServletFileUpload核心:将所有的表单元素解析为Fileitem
ServletFileUpload upload = new ServletFileUpload(factory);
List<FileItem> items = upload.parseRequest(request);
//获取文件目录
String path = request.getServletContext().getRealPath("/upload");
//遍历处理
for (FileItem fileItem : items) {
//判断类型
if(fileItem.isFormField()){//是否为普通表单元素
//获取普通
String name = fileItem.getFieldName();//表单元素name值
String value = fileItem.getString();//value值
System.out.println("name="+name+",value="+value);
}else{//文件
String name = fileItem.getName();//文件名称
fileItem.write(new File(path, name));
}
}
System.out.println("上传成功");
下载
将服务器的文件传输到本地。
//1.设置编码
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//2.获取参数的值 download?filename=xxx
String filename = request.getParameter("filename");
//3.获取文件的服务器路径(获取目录的路径)
String path = request.getServletContext().getRealPath("/res");
//4.读取文件
InputStream is = new FileInputStream(new File(path,filename));
//5.通过响应写文件到本地
//设置响应头
response.setHeader("Content-Disposition",
"attachment;filename="+URLEncoder.encode(filename, "utf-8"));
OutputStream out = response.getOutputStream();
byte[] buf = new byte[1024];
int data = -1;
while((data=is.read(buf)) != -1){
out.write(buf, 0, data);
}
out.close();
is.close();
过滤器(Filter)
过滤请求和响应。
当用户发出请求时,首先到达过滤器,过滤器如果”放行”,此时该请求就可以到达下一个过滤器或者servlet。当客户端响应时,也需要经过过滤器。
//初始化
@Override
public void init(FilterConfig filterConfig) throws ServletException { } //过滤请求和响应
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
System.out.println("filter 接收到请求");
//放行
chain.doFilter(request, response); System.out.println("filter 接收到响应");
} //销毁
@Override
public void destroy() { } <filter>
<filter-name>myfilter</filter-name>
<filter-class>filter.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>myfilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> filter应用场景:
1) 全局的编码设置
2) 敏感字过滤
3) 权限管理
监听器(listener)
监听域的对象创建销毁。
HttpRequestListener
HttpSessionListener
ServletContextListener
监听域中数据的变化(添加,修改,删除)
ServletContextAttributeListener:监听application域中数据变化
ServletRequestAttributeListener:监听request域中数据的变化
HttpSessionActivationListener:监听session的状态(活化和钝化)
HttpSessionAttributeListener:监听session域中数据变化
HttpSessionBindingListener:实现session和对象的绑定
Ajax
同步请求:第二次请求需要等到第一次请求获取到响应之后才可以发送。
异步请求:请求之间没有依赖关系。
异步 JavaScript 及 XML(Asynchronous JavaScript And XML)。
模拟百度查询:
原生js:
var val = document.getElementById("content").value;
var oDiv = document.getElementById("div1");
//借助于Ajax
//1.创建xhr对象
var xhr = new XMLHttpRequest();
//2.打开连接
xhr.open("GET","test?key="+val); //请求方式 请求路径 是否异步
//3.发送请求 请求体
xhr.send(null);
//4.监听状态并且接收响应
xhr.onreadystatechange = function(){
//获取请求状态 0-4 请求正确时获取
if(xhr.readyState == 4 && xhr.status == 200){
oDiv.innerHTML = xhr.responseText;
}
} jQuery的Ajax:
$.ajax({
url:"test",
type:"get",
data:"key="+$("#content").val(),
dataType:"text",
success:function(data){
$("#div1").html(data);
}
});
url:请求路径
type:请求方式 get/post
data:传输的数据 字符串或者json {“key”:$(“#content”).val()}
dataType:服务器响应数据类型 (xml/html/json/script/text)
success:服务器响应正确时返回
Day10 上传和下载的更多相关文章
- win7下利用ftp实现华为路由器的上传和下载
win7下利用ftp实现华为路由器的上传和下载 1. Win7下ftp的安装和配置 (1)开始->控制面板->程序->程序和功能->打开或关闭Windows功能 (2)在Wi ...
- Java实现FTP文件与文件夹的上传和下载
Java实现FTP文件与文件夹的上传和下载 FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为"文传协议".用于Internet上的控制 ...
- java web学习总结(二十四) -------------------Servlet文件上传和下载的实现
在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...
- Struts2入门(七)——Struts2的文件上传和下载
一.前言 在之前的随笔之中,我们已经了解Java通过上传组件来实现上传和下载,这次我们来了解Struts2的上传和下载. 注意:文件上传时,我们需要将表单提交方式设置为"POST" ...
- php实现文件上传与下载(上)
php实现文件的上传与下载是一个挺基本的功能,一般网站多多少少都会有这样的需求在内,当然不是说所有的文件都可以被上传,那这网络就太没有安全性可言了.因为接触php时间不长,今天写练练手,随笔也就是公开 ...
- SecureCRT上传和下载文件
SecureCRT上传和下载文件(下载默认目录) SecureCR 下的文件传输协议有ASCII .Xmodem .Ymodem .Zmodem ASCII:这是最快的传输协议,但只能传送文本文件. ...
- SpringMVC文件上传和下载
上传与下载 1文件上传 1.1加入jar包 文件上传需要依赖的jar包 1.2配置部件解析器 解析二进制流数据. <?xml version="1.0" encoding=& ...
- 通读AFN②--AFN的上传和下载功能分析、SessionTask及相应的session代理方法的使用细节
这一部分主要研究AFN的上传和下载功能,中间涉及到各种NSURLSessionTask的一些创建的解析和HTTPSessionManager对RESTful风格的web应用的支持,同时会穿插一点NSU ...
- 每天一个linux命令(26):用SecureCRT来上传和下载
用SSH管理linux服务器时经常需要远程与本地之间交互文件.而直接用SecureCRT自带的上传下载功能无疑是最方便的,SecureCRT下的文件传输协议有ASCII.Xmodem.Zmodem.文 ...
随机推荐
- js静态数据分页展示
拿vue做示例 首先定义data data() { return { tableData: [], // 当前页的数据,用于给表格展示用的 tableDataAll: [], // 需要拿来分页的总数 ...
- css 文本和div垂直居中方法汇总
https://blog.csdn.net/u014607184/article/details/51820508 https://blog.csdn.net/liuying1802028915/ar ...
- Jquery使用Id获取焦点和失去焦点
Jquery使用Id获取焦点和失去焦点有2种方法 先用第一种(val()=="空"): <div> <input type="text" id ...
- axios上传图片(及vue上传图片到七牛))
浏览器上传图片到服务端,我用过两种方法: 1.本地图片转换成base64,然后通过普通的post请求发送到服务端. 操作简单,适合小图,以及如果想兼容低版本的ie没办法用此方法 2.通过form表单提 ...
- MySQL创建数据库/表等基本命令操作
前提:安装好MySQL并且配置好服务,能够正常使用 按住键盘上的Windows图标,通过搜索框找到MySQL5.7 Command Line Client,点击启动 输入安装时设置用户的密码 成功连接 ...
- jquery实现复选框全选,全不选,反选中的问题
今天试了一下用jquery选择复选框,本来以为很简单的东西却有bug,于是搜索了一下找到了解决方法. html代码如下(这里没有用任何样式,就没有再放css了): <html> <h ...
- opencv3.2.0图像离散傅里叶变换
源码: ##名称:离散傅里叶变换 ##平台:QT5.7.1+opencv3.2.0 ##日期:2017年12月13. /**** 新建QT控制台程序****/ #include <QCoreAp ...
- Reset GitLab Root Password
重置gitlab管理员密码 Log into your server with root privileges. Then start a Ruby on Rails console. Start t ...
- 一步一步 Pwn RouterOS之exploit构造
前言 本文由 本人 首发于 先知安全技术社区: https://xianzhi.aliyun.com/forum/user/5274 前面已经分析完漏洞,并且搭建好了调试环境,本文将介绍如何利用漏洞写 ...
- C#实现ADH815通讯
最近在做自提柜项目,考虑到ADH815电路板在自助售卖行业的通用性.把通讯代码贴出来了. 下载地址