一:上传
1.webcontent下创一个名为upload的文件夹
2.web.xml配置
<servlet>
<servlet-name>UploadServlet</servlet-name>
<servlet-class>com.briup.upload.UpLoadServlet</servlet-class>
<init-param>
<param-name>path</param-name>
<param-value>/upload</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>UploadServlet</servlet-name>
<url-pattern>/Upload</url-pattern>
</servlet-mapping>
3…webcontent下创一个名为upload.html的页面
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>test.html</title>
</head>
<body>
<h1>hello world</h1>
<h2>上传</h2>
<!--涉及到图片之类就不用request来获取了 -->
<!-- action代表上传路径-->
<form action="UpLoad" method="post" enctype="multipart/form-data">
<input type="text" name="username" /><br>
<input type="file" name="MyImage" /><br>
<input type="submit" value="上传" />
</form>
</body>
</html>
4.servlet
package com.briup.upload;
import java.io.File;
import java.io.IOException;
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.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class UpLoadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private String path;
@Override
public void init() throws ServletException {
//在web.xml中把path值传过来
//path是上传路径
path = getServletConfig().getInitParameter("path");
}
@SuppressWarnings("unchecked")
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获得上传目录的绝对路径
String realpath = this.getServletContext().getRealPath(path);
try {
//构造一个文件上传处理对象,第三方插件写好的类 DiskFileItemFactory 文件条目工厂(上传文件的工厂类)
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upLoad = new ServletFileUpload(factory);
//获得表单中提交内容
List<FileItem> list = upLoad.parseRequest(request);
for (FileItem fileItem : list) {
//fileItem.isFormField()返回true表示是普通的表单组件 用户名密码
//fileItem.isFormField()返回false表示是上传
if (fileItem.isFormField()) {
// getName()方法返回的是文件名字 普通表单组件有文件,返回NULL
String FieldName = fileItem.getFieldName();
//这里就不用request来取值了
String Content = fileItem.getString("UTF-8");
//content获取的是值
//为了后面可以把普通参数从request中拿出来
request.setAttribute(FieldName, Content);
} else {
//取得上传文件的名字
String fileName = fileItem.getName();
//避免文件名字重复
fileName = System.currentTimeMillis()+fileName;
File file = new File(realpath, fileName);
//把上传文件进行指定目录
fileItem.write(file);
}
}
System.out.println("request.getAttribute(\"username\") = "+request.getAttribute("username"));
} catch (Exception e) {
e.printStackTrace();
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
那就对了本来就不会在那个文件里边出现,在你本地的Tomcat文件夹下面的项目目录里
有时候重启的话会删除这个文件夹里边的东西,这也可以理解,因为你是项目里上传的所以关闭项目删除也可以理解
多上传:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>test.html</title>
</head>
<body>
<h1>hello world</h1>
<h2>上传</h2>
<!--涉及到图片之类就不用request来获取了 -->
<!-- action代表上传路径-->
<form action="UpLoad" method="post" enctype="multipart/form-data">
<input type="text" name="username" /><br>
<input type="file" name="MyImage" /><br>
<input type="file" name="MyImage1" /><br>
<input type="file" name="MyImage2" /><br>
<!--<input type="file" name="MyImage" /><br> 多复制就是上传多个 名字得改一下 -->
<input type="submit" value="上传" />
</form>
</body>
</html>
其实就是多加几行代码 复制一下改个名字就好
<input type="file" name="MyImage" /><br>
<input type="file" name="MyImage1" /><br>
里边的东西被覆盖了
二:下载:
1.webcontent下创一个名为download的文件夹
2.web.xml配置
<servlet>
<servlet-name>DownLoadServlet</servlet-name>
<servlet-class>com.briup.upload.DownLoadServlet</servlet-class>
<init-param>
<param-name>path</param-name>
<param-value>/download</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>DownLoadServlet</servlet-name>
<url-pattern>/DownLoad</url-pattern>
</servlet-mapping>
3…webcontent下创一个名为download.html的页面
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>test.html</title>
</head>
<body>
<h1>hello world</h1>
<h2>servlet下载</h2>
<a href="DownLoad?fileName=1.png">1.png</a><br>
</body>
</html>
4.servlet
package com.briup.upload;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URLEncoder;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class DownLoadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private String path;
@Override
public void init() throws ServletException {
//在web.xml中把path值传过来
path = getServletConfig().getInitParameter("path");
}
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
// 获得用户需要下载文件的名字
String fileName = request.getParameter("fileName");
// 下载文件所在目录的绝对路径
String realPath = getServletContext().getRealPath(path);
// 设置为下载application/x-download
response.setContentType("application/x-download");
// 下载文件时显示的文件保存名称
String fileDisplay = "briup_"+fileName;
// 中文编码转换
fileDisplay = URLEncoder.encode(fileDisplay, "UTF-8");
//设置响应头部信息
response.addHeader("Content-Disposition", "attachment;filename="+fileDisplay);
try {
ServletOutputStream out = response.getOutputStream();
File file = new File(realPath,fileName);
FileInputStream in = new FileInputStream(file);
byte[] b = new byte[1024];
int len = -1;
while ((len = in.read(b)) != -1) {
out.write(b, 0, len);
}
out.flush();
in.close();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
//注意下载之后就不能使用request跳转了,因为response已经返回了
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doGet(req, resp);
}
}