JavaWeb文件上传与下载功能解析
文件上传功能
在JavaWeb中,文件上传主要包括三个部分:前端页面、后端处理、文件保存。
前端页面
文件上传的前端页面需要使用form表单,同时表单属性需要设置为enctype="multipart/form-data",以支持文件上传。例如:
<form action="upload" method="POST" enctype="multipart/form-data">
<input type="file" name="file">
<button type="submit">上传文件</button>
</form>
后端处理
在后端,我们可以使用Servlet来处理文件上传。在Servlet中,可以通过request.getPart()方法获取上传的文件。例如:
Part filePart = request.getPart("file"); // 获取上传的文件
String fileName = filePart.getSubmittedFileName(); // 获取文件名
InputStream fileContent = filePart.getInputStream(); // 获取文件输入流
在获取到文件后,可以进行保存。保存的方式有很多种,例如使用流的方式将文件保存到磁盘中,或者通过数据库将文件保存到BLOB类型的字段中。
文件保存
使用流的方式将文件保存到磁盘中,可以使用文件输出流。例如:
FileOutputStream outputStream = new FileOutputStream("上传目录/" + fileName);
byte[] buffer = new byte[1024];
int len;
while ((len = fileContent.read(buffer)) != -1) {
outputStream.write(buffer, 0, len); // 写入文件
}
outputStream.close();
fileContent.close();
文件下载功能
相对于文件上传,文件下载比较简单。在JavaWeb中,文件下载的主要部分有两个:前端链接、后端处理。
前端链接
在前端,提供一个下载链接即可,例如:
<a href="download?filename=文件名">下载文件</a>
其中,download表示Servlet的名称,filename表示要下载的文件名。
后端处理
在后端,需要读取文件,并将其以二进制流的形式输出到response中。例如:
String fileName = request.getParameter("filename"); // 获取要下载的文件名
String filePath = "文件目录/" + fileName;
File file = new File(filePath);
InputStream inputStream = new FileInputStream(file);
response.setHeader("Content-Disposition", "attachment;filename=" + fileName); // 设置Content-Disposition头信息,告诉浏览器以附件形式下载文件
ServletOutputStream outputStream = response.getOutputStream();
byte[] buffer = new byte[1024];
int len;
while ((len = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, len); // 输出文件流
}
outputStream.close();
inputStream.close();
示例
文件上传示例
前端页面示例:
<form action="upload" method="POST" enctype="multipart/form-data">
<input type="file" name="file">
<button type="submit">上传文件</button>
</form>
Servlet示例:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Part filePart = request.getPart("file"); // 获取上传的文件
String fileName = filePart.getSubmittedFileName(); // 获取文件名
InputStream fileContent = filePart.getInputStream(); // 获取文件输入流
FileOutputStream outputStream = new FileOutputStream("上传目录/" + fileName);
byte[] buffer = new byte[1024];
int len;
while ((len = fileContent.read(buffer)) != -1) {
outputStream.write(buffer, 0, len); // 写入文件
}
outputStream.close();
fileContent.close();
}
文件下载示例
前端页面示例:
<a href="download?filename=文件名">下载文件</a>
Servlet示例:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String fileName = request.getParameter("filename"); // 获取要下载的文件名
String filePath = "文件目录/" + fileName;
File file = new File(filePath);
InputStream inputStream = new FileInputStream(file);
response.setHeader("Content-Disposition", "attachment;filename=" + fileName); // 设置Content-Disposition头信息,告诉浏览器以附件形式下载文件
ServletOutputStream outputStream = response.getOutputStream();
byte[] buffer = new byte[1024];
int len;
while ((len = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, len); // 输出文件流
}
outputStream.close();
inputStream.close();
}
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaWeb文件上传与下载功能解析 - Python技术站