首先声明一下,本人是一个小白,由于最近在实训,学习了好多以前没学过的东西,由此来写记录一下自己的学习情况,正好也可以查漏补缺!欢迎小伙伴们一起来讨论呀!jar包的资源我目前还不知道咋放上来,要是有需要可以私信我!!!
目录
一. 文件上传
注册完善资料中,上传相片,邮箱中上传文件
- 使用两个jar包
- 编写一个上传文件的表单
以下几点需要注意:
1)表单 method 属性应该设置为 POST 方法,不能使用 GET 方法。
2)表单 enctype 属性应该设置为 multipart/form-data.
3)表单 action 属性应该设置为在后端服务器上处理文件上传的 Servlet 文件。下面的实例使用了 UploadServlet 来上传文件。
上传单个文件,您应该使用单个带有属性 type="file" 的 <input .../> 标签。为了允许多个文件上传,请包含多个 name 属性值不同的 input 标签。输入标签具有不同的名称属性的值。浏览器会为每个 input 标签关联一个浏览按钮。
3.处理上传过了的文件,真正把它上传到服务器,要在服务器上建立一个路径,假设叫upload;upload要放在webRoot目录下
4.编写处理上传的代码
try {
// 解析请求内容 提取文件数据
@SuppressWarnings("unchecked")
List<FileItem> formItems = upload.parseRequest(request);
if (formItems != null && formItems.size() > 0) {
//迭代表单数据
for (FileItem item : formItems) {
// 处理不在表单的数据
if (!item.isFormField()) {
String fileName = new File(item.getName()).getName();
//可以对fileName进行处理
String filePath = uploadPath + File.separator + fileName;
File storeFile = new File(filePath);
// 在控制台输出文件上传的路径
System.out.println(filePath);
// 保存文件到硬盘
item.write(storeFile);
}
if (item.isFormField()) {
String field= item.getFieldName();
String value= item.getString();
System.out.println(field);
System.out.println(value);
System.out.println(new String(value.getBytes("iso-8859-1"),"utf-8"));
}
}
request.setAttribute("message","上传上成功!!!");
// 跳转到 upload.jsp
request.getRequestDispatcher("/upload.jsp").forward( request, response);
}
} catch (Exception ex) {
request.setAttribute("message",
"错误信息: " + ex.getMessage());
}
二. 文件下载
下载视频文件,下载音频文件,下载资料
1.下载互联网上的图像文件,视频文件,音频文件,….
2.下载本地服务器上的文件
第一步:服务器上要有这些资料
第二步:编写代码:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取文件名
String filename=request.getParameter("name");
//防止读取name名乱码
filename=new String(filename.getBytes("iso-8859-1"),"utf-8");
//在控制台打印文件名
System.out.println("文件名"+filename);
//设置文件MIME类型
response.setContentType(getServletContext().getMimeType(filename));
//设置Content-Disposition
response.setHeader("Content-Disposition", "attachment;filename="+filename);
//获取要下载的文件绝对路径,我的文件都放到WebRoot/download目录下
ServletContext context=this.getServletContext();
String fullFileName=context.getRealPath("/download/"+filename);
System.out.println(fullFileName);
//输入流为项目文件,输出流指向浏览器
InputStream is=new FileInputStream(fullFileName);
ServletOutputStream os =response.getOutputStream();
/*
*设置缓冲区
* is.read(b)当文件读完时返回-1
*/
int len=-1;
byte[] b=new byte[1024];
while((len=is.read(b))!=-1){
os.write(b,0,len);
}
//关闭流
is.close();
os.close();
}
三. 验证码应用
验证码的作用:有效防止这种问题对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试,实际上是用验证码是现在很多网站通行的方式(比如招商银行的网上个人银行,腾讯的QQ社区),我们利用比较简易的方式实现了这个功能。
验证码一般是防止批量注册的,人眼看起来都费劲,何况是机器。像百度贴吧未登录发贴要输入验证码大概是防止大规模匿名回帖的发生,目前,不少网站为了防止用户利用机器人自动注册、登录、灌水,都采用了验证码技术。
所谓验证码,就是将一串随机产生的数字或符号,生成一幅图片, 图片里加上一些干扰象素,由用户肉眼识别其中的验证码信息,输入表单提交网站验证,验证成功后才能使用某项功能。
如何做一个验证码:
- 生成一个验证码
- 要把生成验证码存储在session中
- 表单中的输入值要有session中值要一致
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//ͨ通过工具类生成验证码
String authCode = AuthCode.getAuthCode();
//将验证码保存到session中,便于以后验证֤
request.getSession().setAttribute("authCode", authCode);
try {
//发送图片
ImageIO.write(AuthCode.getAuthImg(authCode), "JPEG", response.getOutputStream());
} catch (IOException e){
e.printStackTrace();
}
}