Java函数实现文件上传和下载的方法
发布时间:2023-06-15 21:49:20
文件上传和下载是Web开发中非常重要的功能,本文主要介绍Java函数实现文件上传和下载的方法。
一、文件上传
1.表单提交
首先需要在HTML页面中添加表单,用于提交文件信息和文件本身。其中form的enctype属性要设置为"multipart/form-data",表示提交的是二进制数据。
<form action="upload" method="post" enctype="multipart/form-data"> <input type="file" name="file"> <input type="submit" value="上传"> </form>
2.Servlet处理
在Servlet中需要获取表单中的file字段,然后读取文件内容,将其写入到服务器上的文件中。需要使用Part对象,可以通过HttpServletRequest的getPart()方法获取。
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Part part = request.getPart("file");
String fileName = getFileName(part);
String uploadPath = getServletContext().getRealPath("/upload/" + fileName);
InputStream input = part.getInputStream();
FileOutputStream output = new FileOutputStream(uploadPath);
byte[] buffer = new byte[1024];
int len;
while((len=input.read(buffer)) != -1) {
output.write(buffer, 0, len);
}
output.close();
input.close();
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.print("上传成功");
}
其中,getFileName()方法用于获取上传文件的文件名。
private String getFileName(Part part) {
String header = part.getHeader("Content-Disposition");
String[] params = header.split(";");
for (String param : params) {
if(param.trim().startsWith("filename")) {
return param.substring(param.indexOf("=") + 1).trim().replace("\"", "");
}
}
return null;
}
二、文件下载
1.Servlet处理
在Servlet中,需要根据用户请求下载的文件名,将文件的内容读取出来,然后将其写入到response的输出流中,以供用户下载。在这里,需要设置response的ContentType和Content-Disposition两个属性,其中ContentType设置为"application/octet-stream",表示下载二进制文件;Content-Disposition设置为attachment,并添加文件名,表示以附件的形式下载并保存文件。
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String fileName = request.getParameter("fileName");
String filePath = getServletContext().getRealPath("/upload/" + fileName);
File file = new File(filePath);
InputStream input = new FileInputStream(file);
response.setContentType("application/octet-stream");
response.setContentLength((int)file.length());
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
byte[] buffer = new byte[1024];
int len;
while ((len = input.read(buffer)) > 0) {
response.getOutputStream().write(buffer, 0, len);
}
input.close();
response.getOutputStream().flush();
}
2.HTML页面
在HTML页面中添加超链接,并将要下载的文件名以参数的形式传递给Servlet。
<a href="download?fileName=test.docx">下载</a>
以上就是Java函数实现文件上传和下载的方法,需要注意的是在文件操作过程中要及时关闭文件读写流,以免造成资源泄露。
