JavaWeb实现文件上传与下载的方法
上传文件
文件上传步骤:
- 在表单中设置表单属性 enctype="multipart/form-data",使表单支持文件上传;
- 在服务器端获取表单数据,通过 request.getPart("file") 和 Part.getInputStream() 方法获取上传的文件流;
- 将文件流保存到指定的文件中,可以使用 FileOutputStream 或者 IOUtils.copy() 方法。
下面是一个文件上传的示例代码:
服务器端代码
@WebServlet("/upload")
public class FileUploadServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
//存储文件的目录
String savePath = request.getSession().getServletContext().getRealPath("/WEB-INF/upload");
File file = new File(savePath);
//如果文件夹不存在则创建
if(!file.exists() && !file.isDirectory()){
file.mkdir();
}
Part part = request.getPart("file");
String fileName = getFileName(part);
part.write(savePath + File.separator + fileName);
response.getWriter().write("文件上传成功!");
}
/*获取上传的文件名*/
private String getFileName(final Part part) {
final String header = part.getHeader("content-disposition");
for (String content : header.split(";")) {
if (content.trim().startsWith("filename")) {
return content.substring(content.indexOf('=') + 1).trim().replace("\"", "");
}
}
return null;
}
}
客户端代码
<form method="POST" action="${pageContext.request.contextPath}/upload" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="上传">
</form>
下载文件
文件下载步骤:
- 在服务器端根据文件名获取文件路径,并将文件以流的形式输出给客户端;
- 使用 OutputStream 将文件输出给客户端,可以采用 IOUtils.copy() 方法。
下面是一个文件下载的示例代码:
服务器端代码
@WebServlet("/download")
public class FileDownloadServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
String fileName = request.getParameter("filename");
String filePath = request.getSession().getServletContext().getRealPath("/WEB-INF/upload") + File.separator + fileName;
File file = new File(filePath);
response.setContentType(getServletContext().getMimeType(fileName));
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
InputStream inputStream = new FileInputStream(file);
OutputStream outputStream = response.getOutputStream();
IOUtils.copy(inputStream, outputStream);
inputStream.close();
outputStream.close();
}
}
客户端代码
<a href="${pageContext.request.contextPath}/download?filename=xxx.jpg">下载</a>
在上述的示例代码中,需要注意的是:
- 文件上传性能方面,如果上传文件比较大,推荐使用 Apache Commons FileUpload 组件;
- 文件下载性能方面,如果下载文件比较大,推荐使用 NIO 或者大文件分段下载方式。
以上就是 JavaWeb 实现文件上传与下载的攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaWeb实现文件上传与下载的方法 - Python技术站