前言
在上网的时候我们常常遇到文件上传的情况,例如上传头像、上传资料等;当然除了上传,下载的
情况也很多,接下来我们看看servlet中怎么实现文件的上传和下载。
一、文件上传
文件上传涉及到前台页面的编写和后台服务器代码的编写,前台发送文件,后台接收并保存文件,这才是一个完整的文件上传。
1.1 前台页面
在做文件上传的时候,会有一个上传文件的界面,首先我们需要一个表单,并且表单的请求方式为POST; 其次我们的form表单的enctype必须设为“multipart/form-data”,即enctype=“multipart/form-data”,意思是设置表单的类型为文件上传表单,默认情况下这个表单类型是”application/x-www.form-urlencoded“,不能用于文件上传,只有使用了multipart/form-data才能完整地传递文件数据。
1.2 后台实现
使用注解@MultipartConfig将一个Servlet标识为支持文件上传.Servlet将multipart/form-data的POST请求封装成Part,通过Part对上传的文件进行操作.
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.io.IOException;
@WebServlet("/upload")
@MultipartConfig(fileSizeThreshold = 1024 * 1024 * 2, // 设置文件大小阈值
maxFileSize = 1024 * 1024 * 10, // 设置最大文件大小
maxRequestSize = 1024 * 1024 * 50) // 设置最大请求大小
public class FileUploadServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获取上传的文件
Part filePart = request.getPart("file");
String fileName = getFileName(filePart);
// 指定文件保存路径
String savePath = "C:/uploads/" + fileName;
// 保存文件到指定路径
filePart.write(savePath);
// 文件上传成功后的处理逻辑
response.getWriter().println("文件上传成功!");
}
// 从Part的header中获取文件名
private String getFileName(Part part) {
String contentDisposition = part.getHeader("content-disposition");
String[] elements = contentDisposition.split(";");
for (String element : elements) {
if (element.trim().startsWith("filename")) {
return element.substring(element.indexOf('=') + 1).trim().replace("\"", "");
}
}
return null;
}
}
二、文件下载
2.1 前台页面
2.2后台实现
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 java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
@WebServlet("/download")
public class FileDownloadServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获取要下载的文件路径
String filePath = "path_to_your_file";
// 设置响应头,告诉浏览器响应类型为文件下载
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=\"" + filePath + "\"");
// 读取文件,并写入响应流中
FileInputStream fileInputStream = new FileInputStream(filePath);
OutputStream outputStream = response.getOutputStream();
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = fileInputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
fileInputStream.close();
outputStream.close();
}
}
相关阅读
发表评论