上传
准备jar包
- commons-fileupload-1.3.1.jar
- commons-io-2.4.jar
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="UploadServlet" method="post" enctype="multipart/form-data">
学号:<input type="text" name="sno" /></br>
姓名:<input type="text" name="sname" /></br>
上传照片:<input type="file" name="spicture" /></br>
<input type="submit" value="上传" />
</form>
</body>
</html>
UploadServlet.java
package com.servlet;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadBase;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class UploadServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=UTF-8");
// 上传
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if (isMultipart) {
// FileItemFactory factory= new DiskFileItemFactory();
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
// 上传文件时用到的历史文件的大小FileItemFactory
factory.setSizeThreshold(10240);// 设置临时的缓冲文件大小为10kb
factory.setRepository(new File("D:\\uploadFileTemp"));// 设置零食文件的目录
// 控制上传文件大小 1kb=1024b ServletFileUpload
upload.setSizeMax(20480);// 字节 b
try {
Thread.sleep(3000);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
// 通过parseRequest解析form中的所有请求字段,并保存在items集合中
try {
List<FileItem> items = upload.parseRequest(request);
Iterator<FileItem> iter = items.iterator();
while (iter.hasNext()) {
FileItem item = iter.next();
String itemName = item.getFieldName();
int sno = -1;
String sname = null;
// 判断前台字段是普通form表单字段还是文件字段
if (item.isFormField()) {
if (itemName.equals("sno")) {
sno = Integer.parseInt(item.getString("utf-8"));
} else if (itemName.equals("sname")) {
sname = item.getString("utf-8");
}
} else {// spicture
// 文件上传 getFieldnName 是获取普通表单字段的Name的值
// getName()是获取文件名
String fileName = item.getName();// .txt .png .jpg等等格式
String ext = fileName.substring(fileName.indexOf(".") + 1);
// 对上传文件的类型进行限制处理
if (!(ext.equals("png") || ext.equals("txt") || ext.equals("jpg"))) {
System.out.println("上传类型有误");
return;
}
// 获取文件内容并上传
// 定义文件路径
// 获取服务器路径方法
// request.getSession().getServletContext().getRealPath("uploadFile");
String path = "D:\\uploadFile";
File file = new File(path, fileName);
item.write(file);
System.out.println(fileName + "-----上传成功!");
return;
}
}
} catch (FileUploadBase.SizeLimitExceededException e) {
System.out.println("上传文件大小超过限制!");
} catch (FileUploadException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
下载
下载文件
在WebContent/res/
里
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="UploadServlet" method="post" enctype="multipart/form-data">
学号:<input type="text" name="sno" /></br>
姓名:<input type="text" name="sname" /></br>
上传照片:<input type="file" name="spicture" /></br>
<input type="submit" value="上传" />
</form>
<a href="DownloadServlet?filename=服务器.txt">下载</a>
</body>
</html>
DownloadServlet.java
public class DownloadServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
//获取需要下载名字
String fileName = request.getParameter("filename");
//下载文件,需要设置消息头
response.addHeader("content-Type", "application/octet-stream");//二进制文件都可以下载
//获取客户端的User-Agent信息
String header = request.getHeader("User-Agent");
if(header.toLowerCase().indexOf("qqbrowser") !=-1) {
//QQ浏览器下载
response.addHeader("content-Disposition", "attachment;filename==?UTF-8?B?"+new String(Base64.encode(fileName.getBytes("utf-8")) )+"?=");//flineName包含了文件扩展名
}else {
//Edge浏览器下载,文件名乱码问题
response.addHeader("content-Disposition", "attachment;filename="+URLEncoder.encode(fileName,"utf-8"));//flineName包含了文件扩展名
}
//Servlet通过文件地址,将文件转为输入流读到Servlet中
InputStream in = getServletContext().getResourceAsStream("/res/"+fileName);
//通过输出流将刚才的输入流输出给用户
ServletOutputStream out = response.getOutputStream();
byte[] bs=new byte[10];
int len=-1;
while((len=in.read(bs)) !=-1) {
out.write(bs, 0, len);
}
out.close();
in.close();
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
最后可以关注一下我个人微信公众号,不定期更新一些好用的资源以及生活上的点点滴滴~~