这篇文章主要讲解了JavaWeb servlet如何实现下载与上传功能,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。
创新互联建站服务项目包括杜集网站建设、杜集网站制作、杜集网页制作以及杜集网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,杜集网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到杜集省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!1.首先制作一个jsp页面,主要是用来触发下载的。这里可以根据你的想法来做,当然servlet那边就要相应的更改了。我这里使用一个简单的a标签来触发。
2.设置响应信息,告诉浏览器要将传过来的数据识别成下载;根据提交上来的数据找到对应文件,转成流,返回给浏览器;
先给出触发的条件:
中文文件名需要解决两个问题:
1.浏览器提交上来的中文文件名要识别:这里是普通的get和post的中文数据问题
get方式:String filename = new String(filename.getBytes("iso-8859-1"),"utf-8"); 【tomcat8不需要】
post方式:request.setCharacterEncoding("utf-8")
2.返回给浏览器时,浏览器能识别,即能正确显示回来的下载文件名(如果你下载东西遇到过文件名乱码,就是这个没处理好):
处理方法:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 1.获取下载目标 String filename = request.getParameter("target"); System.out.println(filename); // 2.找到下载目标 String path = getServletContext().getRealPath("download/" + filename); File file = new File(path); if (file.exists()) { // 3.如果文件存在,那么设置响应的内容为下载,告诉浏览器将信息识别成下载 // 判断一下浏览器 String agent = request.getHeader("User-Agent"); if (agent.contains("Firefox")) {// 火狐 BASE64Encoder base64Encoder = new BASE64Encoder(); filename = "=?utf-8?B?" + base64Encoder.encode(filename.getBytes("utf-8")) + "?="; } else {// ie和谷歌 filename = URLEncoder.encode(filename, "utf-8"); } response.setHeader("Content-Disposition", "attachment; filename=" + filename); // 4.获取文件流 FileInputStream fis = new FileInputStream(file); OutputStream os = response.getOutputStream(); // 5.返回给浏览器 int len = 0; byte[] buffer = new byte[1024]; while ((len = fis.read(buffer)) != -1) { os.write(buffer, 0, len); } os.flush();// flush一下,确保一下 os.close(); fis.close(); } else { response.setContentType("text/html;charset=UTF-8"); response.getWriter().write("找不到文件"); } }
另外有需要云服务器可以了解下创新互联建站www.cdcxhl.com,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。