文件上传及下载

陌路散爱 提交于 2020-01-01 18:03:41

1 文件上传

1.1前端页面

<form action="/xx/upload" method="post" enctype="multipart/form-data">
	用户名:<input type="text" name="username"><br/>
	密码:<input type="text" name="password"><br/>
	头像:<input type="file" name="headImg"><br/>
	<input type="submit" value="提交">
</form>

1.2 获取上传流

ServletInputStream input = req.getInputStream();
int read = input.read();
System.out.println(read);

1.3 导入Jar包

commons-fileupload-1.2.2.jar (注意,是jar包)
commons-io-1.4.jar

1.4 具体操作代码

String[] arr={"jpg","png","bmp","gif"};
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
	/*ServletInputStream input = req.getInputStream();
	int read = input.read();
	System.out.println(read);*/
	
	//检查我们是否有文件上传请求
	boolean isMultipart = ServletFileUpload.isMultipartContent(req);
	//System.out.println(isMultipart);
	
	//为基于磁盘的文件项创建工厂
	FileItemFactory factory = new DiskFileItemFactory();

	//创建一个新的文件上传处理程序
	ServletFileUpload upload = new ServletFileUpload(factory);

	//解析请求
	try {
		List<FileItem > list = upload.parseRequest(req);
		for (FileItem fileItem : list) {
			if(fileItem.isFormField())
				System.out.println(fileItem.getFieldName()+":"+fileItem.getString("UTF-8"));
			else{
				//获取web项目根路径
				//String realPath = req.getServletContext().getRealPath("image/"+fileItem.getName());
				//System.out.println(realPath);
				
				String uuid = UUID.randomUUID().toString();
				
				 //获取文件名后缀
				String extension = FilenameUtils.getExtension(fileItem.getName());
				String realPath = null;
				//判断文件名后缀是否匹配
				if(Arrays.asList(arr).contains(extension))	
					realPath = req.getServletContext().getRealPath("image/"+uuid+"."+extension);
				File file = new File(realPath);
				if(!file.exists())
					file.createNewFile();
				fileItem.write(file);
			}
		}
	} catch (Exception e) {
		e.printStackTrace();
	}
}

2 文件下载

@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
	req.setCharacterEncoding("UTF-8");
	//告诉浏览器要下载资源了
	resp.setContentType("application/x-msdownload");
	String filename = req.getParameter("filename");
	//获取文件路径
	String realPath = req.getServletContext().getRealPath("image/"+filename);
	//获取请求头
	String header = req.getHeader("User-Agent");
	String encode = null;
	if(header.contains("Firefox")){
		//将文件名设置编码
		encode = new String(filename.getBytes("UTF-8"),"ISO-8859-1");
	}else{
		encode = URLEncoder.encode(filename,"UTF-8");
	}
	//设置下载文件的名字
	resp.setHeader("Content-Disposition", "attachment; filename="+encode);
	//拷贝文件到响应
	Files.copy(Paths.get(realPath), resp.getOutputStream());
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!