下面详细讲解如何使用JavaEE组件commons-fileupload实现文件上传、下载的完整攻略:
准备工作
首先,需要在项目中引入commons-fileupload组件,可以通过Maven进行引入。在项目的pom.xml文件中添加以下依赖项即可:
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
文件上传的实现
1. 使用表单实现文件上传
在前端代码中,需要添加一个文件上传的表单,并将enctype属性设置为“multipart/form-data”。例如:
<form action="/uploadFile" method="post" enctype="multipart/form-data">
<input type="file" name="file" />
<input type="submit" value="Upload" />
</form>
在后台代码中,需要创建一个Servlet来处理文件上传请求。以下是处理上传请求的Servlet代码示例:
@WebServlet("/uploadFile")
@MultipartConfig
public class FileUploadServlet extends HttpServlet {
private static final String SAVE_DIR = "uploadFiles";
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String appPath = request.getServletContext().getRealPath("/");
String savePath = appPath + File.separator + SAVE_DIR;
File fileSaveDir = new File(savePath);
if (!fileSaveDir.exists()) {
fileSaveDir.mkdir();
}
String fileName = "";
Part part = request.getPart("file");
if (part != null) {
fileName = new File(part.getSubmittedFileName()).getName();
part.write(savePath + File.separator + fileName);
}
response.getWriter().append("File uploaded successfully.");
}
}
2. 使用Ajax实现文件上传
在前端代码中,可以使用Ajax进行文件上传,使用FormData来将文件以二进制流的方式发送到服务器上。
function uploadFile(file) {
var formData = new FormData();
formData.append("file", file);
var xhr = new XMLHttpRequest();
xhr.open("POST", "/uploadFile");
xhr.send(formData);
}
在服务器端的处理方式与使用表单实现文件上传是相同的。
文件下载的实现
在服务器端,下载文件的实现可以通过设置响应的ContentType和Content-Disposition头来实现。以下是一个文件下载的Servlet代码示例:
@WebServlet("/downloadFile")
public class FileDownloadServlet extends HttpServlet {
private static final String SAVE_DIR = "uploadFiles";
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String fileName = request.getParameter("fileName");
if (fileName == null || fileName.equals("")) {
response.getWriter().append("Please provide file name.");
return;
}
String appPath = request.getServletContext().getRealPath("/");
String savePath = appPath + File.separator + SAVE_DIR + File.separator + fileName;
File file = new File(savePath);
if (!file.exists()) {
response.getWriter().append("File not found.");
return;
}
String mimeType = getServletContext().getMimeType(savePath);
if (mimeType == null) {
mimeType = "application/octet-stream";
}
response.setContentType(mimeType);
response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
response.setContentLength((int) file.length());
FileInputStream in = new FileInputStream(file);
OutputStream out = response.getOutputStream();
byte[] buffer = new byte[1024];
int length;
while ((length = in.read(buffer)) > 0) {
out.write(buffer, 0, length);
}
in.close();
out.flush();
}
}
使用以上Servlet代码,可以通过get请求下载对应的文件,传递的参数为fileName。
以上就是使用JavaEE组件commons-fileupload实现文件上传、下载的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaEE组件commons-fileupload实现文件上传、下载 - Python技术站