怎么用java实现文件上传和下载
发布时间:2023-05-18 12:41:04
使用java实现文件上传和下载主要有以下两种方式:
1.使用Java Servlet和JSP实现文件上传和下载
文件上传和下载实现的基本原理是:客户端向服务器发送请求,服务器将文件保存或者读取,然后传输到客户端。
文件上传主要步骤:
(1)利用HTML表单,客户端向服务器发送文件上传请求。
(2)服务器端的Servlet响应请求,将上传的文件保存在服务器的指定目录中。
(3)响应客户端上传成功的提示信息。
文件下载主要步骤:
(1)客户端向服务器发送文件下载请求。
(2)服务器端的Servlet响应请求,读取要下载的文件并将其传输到客户端。
(3)响应客户端成功接收文件的提示信息。
下面是实现文件上传和下载的代码示例:
文件上传代码示例:
@WebServlet(name = "FileUploadServlet", urlPatterns = {"/fileUploadServlet"})
@MultipartConfig
public class FileUploadServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 设置字符编码方式为UTF-8
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
// 获取上传的文件
Part filePart = request.getPart("file");
String fileName = getFileName(filePart);
// 将文件保存在服务器指定的目录中
String fileDir = "D:/upload/";
String filePath = fileDir + fileName;
InputStream inputStream = filePart.getInputStream();
FileOutputStream fileOutputStream = new FileOutputStream(filePath);
byte[] buffer = new byte[1024];
int len;
while ((len = inputStream.read(buffer)) != -1) {
fileOutputStream.write(buffer, 0, len);
}
fileOutputStream.close();
inputStream.close();
// 响应客户端上传成功的提示信息
PrintWriter out = response.getWriter();
out.write("<script>alert('上传成功!');</script>");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
// 获取上传的文件名
private String getFileName(Part part) {
String contentDisposition = part.getHeader("content-disposition");
String[] items = contentDisposition.split(";");
for (String item : items) {
if (item.trim().startsWith("filename")) {
return item.substring(item.indexOf("=") + 2, item.length() - 1);
}
}
return "";
}
}
文件下载代码示例:
@WebServlet(name = "FileDownloadServlet", urlPatterns = {"/fileDownloadServlet"})
public class FileDownloadServlet 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 {
// 获取要下载的文件名
String fileName = request.getParameter("fileName");
String filePath = "D:/upload/" + fileName;
// 设置响应消息头,告诉客户端要下载的文件类型和文件名
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
// 读取要下载的文件并将其传输到客户端
FileInputStream fileInputStream = new FileInputStream(filePath);
int len;
byte[] buffer = new byte[1024];
OutputStream outputStream = response.getOutputStream();
while ((len = fileInputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, len);
}
outputStream.close();
fileInputStream.close();
}
}
2.使用Apache Commons FileUpload实现文件上传和下载
Apache Commons FileUpload是一个用于上传文件的专门库,使用该库可以方便的实现文件上传和下载。下面是使用Apache Commons FileUpload实现文件上传和下载的代码示例:
文件上传代码示例:
@WebServlet(name = "FileUploadServlet", urlPatterns = {"/fileUploadServlet"})
public class FileUploadServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 设置字符编码方式为UTF-8
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
// 创建文件上传处理器
DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory);
// 获取上传文件
List<FileItem> fileItemLists = servletFileUpload.parseRequest(request);
FileItem fileItem = fileItemLists.get(0);
String fileName = fileItem.getName();
// 将上传的文件保存在服务器指定的目录中
String fileDir = "D:/upload/";
String filePath = fileDir + fileName;
fileItem.write(new File(filePath));
// 响应客户端上传成功的提示信息
PrintWriter out = response.getWriter();
out.write("<script>alert('上传成功!');</script>");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
文件下载代码示例:
@WebServlet(name = "FileDownloadServlet", urlPatterns = {"/fileDownloadServlet"})
public class FileDownloadServlet 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 {
// 获取要下载的文件名
String fileName = request.getParameter("fileName");
String filePath = "D:/upload/" + fileName;
// 设置响应消息头,告诉客户端要下载的文件类型和文件名
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
// 读取要下载的文件并将其传输到客户端
FileInputStream fileInputStream = new FileInputStream(filePath);
int len;
byte[] buffer = new byte[1024];
OutputStream outputStream = response.getOutputStream();
while ((len = fileInputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, len);
}
outputStream.close();
fileInputStream.close();
}
}
综上,以上是使用Java Servlet和JSP,以及Apache Commons FileUpload实现文件上传和下载的两种方式,可以根据具体场景选择合适的方式进行文件上传和下载。
