欢迎访问宙启技术站
智能推送

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函数实现文件上传和下载的方法,需要注意的是在文件操作过程中要及时关闭文件读写流,以免造成资源泄露。