首先我对“javaweb上传下载实例完整版解析(下)”这篇文章的完整攻略进行详细讲解。
文章概述
该文章是一篇教程性质的文章,主要介绍了如何利用JavaWeb实现文件上传和下载。文章分为上下两篇,本次攻略主要针对下篇进行讲解。
内容分析
-
使用ServletContext获取真实路径
文章通过示例代码演示了如何使用ServletContext获取当前web应用的真实路径。这是因为文件传输操作需要使用到具体的文件路径。
示例代码:
// 获取当前web应用的真实路径
String rootPath = getServletContext().getRealPath("/"); -
文件上传
接下来的代码示例介绍了如何通过表单提交文件并将文件保存到指定位置。这个过程涉及到了request对象中的一些属性和multipart/form-data编码方式的原理。在示例代码中,我们通过调用request.getPart(name)方法获取对应上传文件的Part对象,并通过将Part对象的输入流写入具体的输出流中实现保存文件。
示例代码:
// 保存上传文件
OutputStream out = new FileOutputStream(uploadPath + fileName);
InputStream in = part.getInputStream();
byte[] buffer = new byte[1024];
int len;
while ((len = in.read(buffer)) != -1) {
out.write(buffer, 0, len);
} -
文件下载
最后,文章介绍了如何实现文件下载操作。在示例代码中,我们通过使用HttpServletResponse对象的setContentType()方法设置下载文件的MIME类型,以及通过设置Content-Disposition响应头信息,来实现文件下载的功能。
示例代码:
// 设置下载文件的MIME类型
response.setContentType("application/octet-stream");
// 设置下载文件需要调用的外部程序或插件
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
示例
接下来我为你提供两个简单的示例,帮助你更好地理解该教程。
示例一
在前端页面中上传一个txt文件,保存到web应用的路径下。
<form action="fileUpload" method="post" enctype="multipart/form-data">
<input type="file" name="file"><br/>
<input type="submit" value="Submit">
</form>
@WebServlet("/fileUpload")
public class FileUploadServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获取当前web应用的真实路径
String rootPath = getServletContext().getRealPath("/");
// 保存上传文件
Part part = request.getPart("file");
String fileName = UUID.randomUUID().toString().replaceAll("-", "") + ".txt";
String uploadPath = rootPath + File.separator + "upload" + File.separator;
OutputStream out = new FileOutputStream(uploadPath + fileName);
InputStream in = part.getInputStream();
byte[] buffer = new byte[1024];
int len;
while ((len = in.read(buffer)) != -1) {
out.write(buffer, 0, len);
}
in.close();
out.close();
}
}
示例二
下载已经保存到web应用路径下的文件。
@WebServlet("/fileDownload")
public class FileDownloadServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获取当前web应用的真实路径
String rootPath = getServletContext().getRealPath("/");
// 设置下载文件的MIME类型
response.setContentType("application/octet-stream");
// 设置下载文件需要调用的外部程序或插件
String fileName = "example.txt";
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
// 获得该文件的输入流
InputStream in = new FileInputStream(rootPath + File.separator + "upload" + File.separator + fileName);
OutputStream out = response.getOutputStream();
// 通过数组写入输出流
byte[] buffer = new byte[1024];
int len;
while ((len = in.read(buffer)) != -1) {
out.write(buffer, 0, len);
}
in.close();
out.close();
}
}
以上就是对“javaweb上传下载实例完整版解析(下)”的完整攻略以及两个示例的详细讲解。希望能对你有所帮助!
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:javaweb上传下载实例完整版解析(下) - Python技术站