java web 多文件上传与下载

前言

Java web 实现文件上传功能,需要从apache官网自行下载

commons-fileupload-1.4 jar和commons-io-2.6 jar 两个jar包

创建上传表单form.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
</head>
<body>
<form action="/chapter12/UploadServlet" method="post" enctype="multipart/form-data" >
<table>
<tr>
<td>文件1:</td>
<td><input type="file" name="File1" size=30 /></td>
</tr>
<tr>
<td>文件2:</td>
<td><input type="file" name="File2" size=30 /></td>
</tr>
<tr>
<td>文件3:</td>
<td><input type="file" name="File3" size=30 /></td>
</tr>
<tr>
<td><input type="submit" value="上传" /></td>
</tr>
</table>

</form>
</body>
</html>

服务器端servlet代码如下

import java.io.*;
import java.io.IOException;
import java.util.List;
import java.util.UUID;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

/**
 * Servlet implementation class UploadServlet
 */
@WebServlet("/UploadServlet")

public class UploadServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		try {
			response.setContentType("text/html;charset=utf-8");
			//创建DiskFileItemFactory工厂对象
			//使用DiskFileItemFactory时需从apache官网下载对应jar包
			//DiskFileItemFactory的学习文末设置链接,一个详细API学习。
			DiskFileItemFactory factory=new DiskFileItemFactory();
			//设置缓存路径
			File fip=new File("E:\\TempFolder");
			//文件不存在则创建新文件夹
			if(!fip.exists())
			{
				fip.mkdirs();
			}
			//设置文件的缓存路径
			factory.setRepository(fip);
			//创建servletfileupload对象
			//ServletFileUpload的使用也需下载相应jar包
			ServletFileUpload fileUpload=new ServletFileUpload(factory);
			//设置字符编码
			fileUpload.setHeaderEncoding("utf-8");
			//解析request,获取所有上传文件的fileitem对象(可以实现一个和多个文件上传)
			//需要注意,若在提交页面的表单之中,对于上传的文件有多个,则按照顺序存入集合之中。
			List<FileItem> fileItems = fileUpload.parseRequest(request);
			PrintWriter writer = response.getWriter();
			//遍历集合
			for(FileItem fileItem : fileItems)
			{
				//获取文件名称
				//此处获取的文件名称包含了上传的路径
				String filename=fileItem.getName();
				if(!filename.equals("")&&filename!=null)
				{
					//从后向前切割字符串,+1则可得到\\之前的文件名称
					filename=filename.substring(filename.lastIndexOf("\\")+1);
					//此处随意,保存文件名
					String fileString=filename;
					//确保文件名唯一
					filename = UUID.randomUUID().toString() + "_"+ filename;
					//在服务器中创建同名文件
					String webpath = "/upload/";
					//webpath+filename为服务器端完整路径
					String filepath=getServletContext().getRealPath(webpath+filename);
					//创建文件
					File file = new File(filepath);
					file.getParentFile().mkdirs();
					file.createNewFile();
					//获得上传文件流
					InputStream in= fileItem.getInputStream();
					FileOutputStream out = new FileOutputStream(file);
					byte buffer[]=new byte[1024];
					int len;
					//以1字节读取上传文件字节,并将其输出到服务端的上传文件输出流中
					while((len=in.read())>0)
						out.write(buffer,0,len);
					in.close();
					out.close();
					//删除临时文件
					fileItem.delete();
					writer.println("文件:"+fileString+"---->>上传成功!"+"<br />");
				}
			}
		} catch (Exception e) {
			// TODO: handle exception
			System.out.println(e.getMessage());
		}
	
		
}


	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

文件上传还有更为简洁的方式,请自行查阅,本代码仅供参考

通过链接实现文件下载

创建download.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="/chapter12/DownloadServlet?filename=工作日志2017上半年.txt"> 文件下载</a>
</body>
</html>

创建DownloadServlet

import java.io.FileInputStream;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.io.IOUtils;

/**
 * Servlet implementation class DownloadServlet
 */
@WebServlet("/DownloadServlet")
public class DownloadServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		response.setContentType("text/html;charset=utf-8");
		response.setCharacterEncoding("utf-8");
		request.setCharacterEncoding("utf-8");
		String filename=request.getParameter("filename");
		filename = new String(filename.trim().getBytes("iso8859-1"),"UTF-8");
		//以上代码用于解决获取的下载文件名乱码问题
		// 创建下载路径(预下载文件保存的位置)
		String folder="E:/";
	    response.addHeader("Content-Type", "application/octet-stream");
		response.addHeader("Content-Disposition", "attachment;filename="+filename);
		InputStream in=new FileInputStream(folder+filename);
		OutputStream out=response.getOutputStream();
		IOUtils.copy(in,out);
		InputStream in1=getServletContext().getResourceAsStream(folder+filename);
		OutputStream out1=response.getOutputStream();
		byte [] buffer=new byte [1024];
		int len;
		while((len=in.read(buffer))!=-1)
		{
			out.write(buffer,0,len);
		}
		
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

本文章仅供学习参考,不足之处望指正!

学习链接

链接: DiskFileItemFactory API详解.
ServletFileUpload API详解
UUID 简略学习

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值