1.jsp实现的下载功能,图片,word,txt都可以下载
第一行代码中去掉contentType="application/x-msdownload"以后才可以下载,可以下载图片,word,tx文件都没问题。
<%@page language="java" pageEncoding="gb2312" import="java.net.*,java.io.*" %> <% //关于文件下载时采用文件流输出的方式处理: //加上response.reset(),并且所有的%>后面不要换行,包括最后一个; response.reset();//可以加也可以不加 response.setContentType("application/x-download"); String filedownload = "D:/primeton5/jakarta-tomcat-5.0.28/upload/2348.txt"; String filedisplay = "2348.txt"; filedisplay = URLEncoder.encode(filedisplay,"UTF-8"); response.addHeader("Content-Disposition","attachment;filename=" + filedisplay); OutputStream outp = null; FileInputStream in = null; try { outp = response.getOutputStream(); in = new FileInputStream(filedownload); byte[] b = new byte[1024]; int i = 0; while((i = in.read(b)) > 0) { outp.write(b, 0, i); } outp.flush(); } catch(Exception e) { System.out.println("Error!"); e.printStackTrace(); } finally { if(in != null) { in.close(); in = null; } if(outp != null) { outp.close(); outp = null; } } %>
2.下载txt文件可以,但是文件内容中添加了文件名和文件的下载路径。下载jpg图片和word文件会显示乱码。
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% // 得到文件名字和路径 String filename = "2312.jpg"; String filepath = "D:/primeton5/jakarta-tomcat-5.0.28/upload/"; // 设置响应头和下载保存的文件名 response.setContentType("application/octet-stream"); response.setHeader("content-disposition", "attachment; filename=\"" + filename + "\""); // 打开指定文件的流信息 java.io.FileInputStream fileinputstream = new java.io.FileInputStream(filepath + filename); // 写出流信息 int i; while ((i=fileinputstream.read()) != -1) { out.write(i); } fileinputstream.close(); out.close(); %>
3.实际场景:应用从文件服务器下载文件。应用知道文件的URI.代码如下
@RequestMapping(value = "/resourcelibrary/downLoadResource.do") public void downLoadResource(String name,String path,HttpServletRequest request,HttpServletResponse response) { //path=path.replaceAll("/", "//"); HttpClient httpClient = new HttpClient(); // 创建GET方法的实例 GetMethod getMethod = new GetMethod(path); BufferedInputStream bis = null; BufferedOutputStream bos = null; OutputStream fos = null; InputStream fis = null; try { response.reset(); response.setHeader("Content-disposition", "attachment;success=true;filename =" + name); // 使用系统提供的默认的恢复策略sysInterface getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler()); //getMethod.setURI(new URI(url, charset)); // 执行getMethod int statusCode = httpClient.executeMethod(getMethod); fis=getMethod.getResponseBodyAsStream(); bis = new BufferedInputStream(fis); fos = response.getOutputStream(); bos = new BufferedOutputStream(fos); // 弹出下载对话框 int bytesRead = 0; byte[] buffer = new byte[8192]; while ((bytesRead = bis.read(buffer, 0, 8192)) != -1) { bos.write(buffer, 0, bytesRead); } bos.flush(); fis.close(); bis.close(); fos.close(); bos.close(); } catch (HttpException e) { // 发生致命的异常,可能是协议不对或者返回的内容有问题 System.out.println("Please check your provided http address!"); e.printStackTrace(); } catch (IOException e) { // 发生网络异常 e.printStackTrace(); } finally { // 释放连接 getMethod.releaseConnection(); try { if(fis!=null){ fis.close(); } if(bis!=null){ bis.close(); } if(fos!=null){ fos.close(); } if(bos!=null){ bos.close(); } } catch (IOException e) { e.printStackTrace(); } } }
总结:java.io.File读取文件,例如File file=new File(path)。path是本地服务器的路径的绝对路径,则没有问题,能读到指定文件。如果是URI的话,会报出找不到文件。其中会报java的斜杠转义的事情。如果把URL转换为URI呢,例如 URL url=new URL(path);File file=new File(url.toURI());这个时候会报出找不到file protocal的错误。
从URL读取指定文件使用File读取真的很难做到,可能有办法,但是我尝试了上面的2中方法都没有成功。后来,想到用httpClient读取跨域的URL文件,这样写入输出流就能下载到文件,真的做到了。httpClient的getMethod用完后,释放连接。
相关推荐
本话题将详细探讨如何通过Ajax实现Java文件的下载,并介绍相关的核心概念和技术。 1. **Ajax**(Asynchronous JavaScript and XML)是一种在不重新加载整个网页的情况下,能够更新部分网页的技术。它通过JavaScript...
Java文件下载的几种方式,是很方便的,找了半天找到了,共享一下
前端vue,后端java。 如果前端是其他语言,可自行转换。 实现在浏览器前端点击后的文件下载。 不是整个工程代码,只把涉及到下载用的前端的代码和后端的代码贴出来了,可以直接复制使用,有详细的步骤。 包含了前端...
文件下载的工具类java代码,设置编码格式,避免下载中文乱码
java文件下载工具类
进度条:78%[===================> ]97.7K/s, will be finished in 75.59s 限速、文件网络地址、文件本地路径,均可在代码里修改。
用Java脚本本在jsp里面写的,采用流的形式下载文件,非常简单,只是实现了下载的功能,
分布式全局唯一ID生成算法,
Java API文档是Java开发者不可或缺的参考资料,它详细记录了Java编程语言的标准库,包括类、接口、方法和属性等核心元素。这些文档不仅提供技术规格,还包含使用示例,帮助程序员理解和应用Java的各类功能。 1. **...
java文件下载工具类,可以下载文件
Java实现文件下载,支持好几种下载方法,解决了中文文件名乱码问题.
Java文件管理系统源码 Java文件管理系统源码 Java文件管理系统源码 Java文件管理系统源码 Java文件管理系统源码 Java文件管理系统源码 Java文件管理系统源码 Java文件管理系统源码 Java文件管理系统源码 ...
Java文件工具类
在Java编程领域,开发一个下载器是常见的任务,特别是对于处理大文件或网络资源时。本文将深入探讨如何实现一个简单的Java下载器,并且重点讲解如何实现下载的实时进度显示和速度计算。以下是对这个主题的详细阐述:...
大文件的快速下载,经测试在100M带宽的网络下,下载一个40M的文件,不超过两秒钟,当然还得根据自己电脑的配置来讲。 其他说明: 文件如果特别小,而自己网络又非常好的情况下,不建议使用线程池进行下载,因为...
后台代码不用写了,在action中直接输入文件地址调用
下载完成后,用户可以直接双击文件图标打开文档查看。大多数操作系统默认都配备了 CHM 文件阅读器,如 Windows 自带的 HTML Help Workshop 就可以用来打开和浏览 CHM 文件。 ### 4. 学习与实践 对于希望深入学习 ...
(1)分别运行工程两个包中的两个.java文件(UploadClient.java和UploadServer.java)分别会弹出“上传客服端”和“上传服务器”两个窗口。 (2)单击“上传服务器”窗口中的“启动服务..”按钮。 (3)单击“上传...
在Java开发中,生成和处理PDF文档是一项常见的需求。Itext是一个强大的库,它允许开发者在Java环境中创建、编辑和修改PDF文档...通过实践和理解这些示例,你将能够熟练地在Java项目中运用Itext处理PDF文件的下载需求。