上传页面设置
<form action="DealServlet" method="post" enctype="multipart/form-data">
用户名:<input type="text" name="username"><br/>
密码:<input type="text" name="password"><br/>
头像1:<input type="file" name="picture"><br/>
头像2:<input type="file" name="picture2"><br/>
<input type="submit" value="submit">
</form>
文件上传需要使用post方法 enctype以附件形式上传
导入jar包
commons-fileupload-1.2.1.jar
commons-io-1.3.2.jar
上传页面处理
InputStream in = null;
FileOutputStream fos = null;
try {
// 1。创建解析工厂DiskFileItemFactory对象
DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
// 2.创建ServletFileUpload对象
ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory);
// 3.解析request对象,得到所有上传内容的LIst集合
List<FileItem> parseRequest = servletFileUpload.parseRequest(request);
User user = new User();
// 4.遍历集合,对每一个FileItem对象调用
for (FileItem fileItem : parseRequest) {
// 判断是否为文件
if (fileItem.isFormField()) {
// 普通表单字段
String name = fileItem.getFieldName();
String val = fileItem.getString();
if (name.equals("username")) {
user.setUsername(val);
} else if (name.equals("password")) {
user.setPassword(val);
}
} else {
// 读取文件
in = fileItem.getInputStream();
String filename = fileItem.getName();// 获取文件名
String substring = filename.substring(filename.indexOf("."));// 文件后缀
String temp = new Date().getTime() + substring;// 文件别名
fos = new FileOutputStream("C:/java1/temp/" + temp);
byte[] b = new byte[1024];
int len = -1;
// 注意read为read(byte)
while ((len = in.read(b)) != -1) {
fos.write(b, 0, len);
fos.flush();
}
String name = fileItem.getFieldName();
if (name.equals("picture")) {
user.setPicture("/images/" + filename);
user.setBpicture("/images/" + temp);
} else if (name.equals("picture2")) {
user.setPicture2("/images/" + filename);
user.setBpicture2("/images/" + temp);
}
}
}
System.out.println(user.getUsername());
System.out.println(user.getPassword());
System.out.println(user.getPicture() + " " + user.getBpicture());
System.out.println(user.getPicture2() + " " + user.getBpicture2());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (in != null) {
in.close();
}
if (fos != null) {
fos.close();
}
}
配置tomcat中server.xml的映射
<Context docBase="C:\java1\temp" path="/images" reloadable="true"/>
文件下载页面
<a href="download?filename=1594965919551.jpg">1594965919551.jpg</a>
下载处理
FileInputStream fis = null;
ServletOutputStream out = null;
try {
String filename = request.getParameter("filename");
fis = new FileInputStream("C:/java1/temp/"+filename);
//1.设置文件类型【以附件形式下载】
response.setContentType("multipart/form-data");
//2.设置文件头
response.setHeader("Content-Disposition", "attachment;fileName="+filename);
//3.获取输出流
out = response.getOutputStream();
//4.向浏览器响应文件
byte[] b = new byte[1024];
int len = -1;
while ((len = fis.read(b)) != -1) {
out.write(b, 0, len);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if(fis != null){
fis.close();
}
if(out != null){
out.close();
}
}