前言
在学文件的上传和下载的时候,老师的东西用着很不舒服,于是就自己找的视频自己学,然后跟着视频敲的,时间长了,容易忘记,就当成博客发了.如果和某位老哥的很相似,请见谅.
开搞
文件上传
浏览器端要求:
post请求
input type="file"
表单的enctype="multipart/form-data"
服务器要求(fileUpload)
通过reuqest.getparameterxxx()获取的参数全部为空
使用步骤:
导入jar包

创建一个磁盘文件项工厂
创建一个核心文件上传对象ServletUpLoad
上传对象调用方法解析请求获取一个List<FileItem>
tomcat发布文件的位置
D:\eclipse.2\eclipse-workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\UpAndDown
文件上传
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>文件上传</title>
</head>
<body>
<!--表单的enctype属性要设置为multipart/form-data-->
<form action="upload" method="post" enctype="multipart/form-data">
<table width="600">
<tr>
<td>上传者</td>
<td><input type="text" name="name" /></td>
</tr>
<tr>
<td>上传文件</td>
<td><input type="file" name="myfile" /></td>
</tr>
<tr>
<!--设置单元格可横跨的列数。-->
<td colspan="2"><input type="submit" value="上传" /></td>
</tr>
</table>
</form>
</body>
</html>
package org.vector.upload;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.List;
import java.util.UUID;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
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;
@WebServlet(name = "UploadServlet", urlPatterns = "/upload")
public class UploadSevlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
response.setContentType("text/html;charset=utf-8");
// 创建DiskFileItemFactory工厂对象
DiskFileItemFactory factory = new DiskFileItemFactory();
// 设置文件缓存目录,如果该文件夹不存在则创建一个
File f = new File("F:\\TempFolder");
if (!f.exists()) {
f.mkdirs();
}
factory.setRepository(f);
// 创建ServletFileUpload对象
ServletFileUpload fileUpload = new ServletFileUpload(factory);
// 设置字符编码
fileUpload.setHeaderEncoding("utf-8");
// 解析request,将form表单的各个字段封装为FileItem对象
List<FileItem> fileItems = fileUpload.parseRequest(request);
// 获取字符流
PrintWriter writer = response.getWriter();
// 遍历List集合
for (FileItem fileItem : fileItems) {
// 判断是否为普通字段
if (fileItem.isFormField()) {
// 获取字段名称
String name = fileItem.getFieldName();
if (name.equals("name")) {
// 如果字段值不为空
if (!fileItem.getString().equals("")) {
String value = fileItem.getString("utf-8");
writer.print("上传者:" + value + "<br />");
}
}
} else {
// 获取上传的文件名
String filename = fileItem.getName();
// 处理上传文件
if (filename != null && filename != "") {
writer.print("上传的文件名称:" + filename + "<br />");
// 保持文件名唯一
filename = UUID.randomUUID().toString() + "-" + filename;
String webpath = "/upload/";
// 创建文件路径
String filepath = getServletContext().getRealPath(webpath + filename);
// 创建File对象
File file = new File(filepath);
// 创建文件夹
file.getParentFile().mkdirs();
// 创建文件
file.createNewFile();
// 获取上传文件流
InputStream in = fileItem.getInputStream();
// 使用 FileOutputStream打开服务器端的上传文件
FileOutputStream out = new FileOutputStream(file);
// 流的对拷
byte[] bytes = new byte[1024];// 每次读取一个字节
int len;
// 开始读取上传文件的字节,并将其输出到服务器端的上传文件输出流中
while ((len = in.read(bytes)) > 0)
out.write(bytes, 0, len);
in.close();
out.close();
fileItem.delete();
writer.print("文件上传成功!");
}
}
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
文件下载
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>文件下载</title>
</head>
<body>
<a href="在服务器中的文件地址">文件下载</a>
</body>
</html>
package org.vector.upload;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(name = "DownloadServlet", urlPatterns = "/download")
public class DownloadServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
// 获取文件名
String filename = request.getParameter("filename");
// 文件所在的文件夹
String folder = "/upload/";
// 通知浏览器以下载的方式打开
response.addHeader("Content-Type", "application/octet-stream");
response.addHeader("Content-Disposition", "attachment;filename=" + filename);
// 通过文件输入流读取文件
InputStream in = getServletContext().getResourceAsStream(folder + filename);
OutputStream out = response.getOutputStream();
byte[] bytes = new byte[1024];
int len = 0;
while ((len = in.read(bytes)) != -1) {
out.write(bytes, 0, len);
}
}
}
网友评论