java下载文件设置头

javaweb下载的时候为什么要设置响应头

响应头是告诉浏览器如何处理响应的,对于html,浏览器会解析并显示出页面,对于下载的内容,浏览器会弹出下载框,如果没有正确的设置响应头,可能会造成浏览器的不正确行为(例如下载html文件或者将要下载的文件显示在页面上等)

java下载文件设置头

java 如何下载文件?

我用struts2给你实现:

1.首先struts2.xml 里面

action name=”download” class=”com.zfj.action.DownloadAction”

!– 注意这里不再是返回一个字符串找到一个页面了

从服务器返回到本地客户端是一个流 我们需要配置流信息

type:表示接受方式或者跳转方法是

默认是 dispatcher 请求转发,所以之前我们一般不书写这个参数但是这里需要更改为stream重定向

result type=”stream”

!–

因为之前我们设置的execute方法返回一个String,但是我们现在需要返回一个流。这里我们要指定一个新的方法为我们处理业务逻

辑并且返回流所以默认execute方法对我们没有作用了,在这里我们指定一个新的方法为我们处理业务逻辑并且最后返回流

这里的inputName是固定写法 后面的名字dname要跟 action里面的getDname对应

param name=”inputName”dname/param

!– 当流返回过来时,我们应当设置头信息

给浏览器,这里设置的都是流信息

name里面的是固定写法

attachment:表示使用附件下载

online:直接打开

分号后的filename是固定写法,后面通过一个ognl表达式

引用下载的文件名

param name=”contentDisposition”attachment;filename=${filename}/param

/result

/action

这里不再是返回一个字符串找到一个页面了。从服务器返回到本地客户端是一个流,我们需要配置流信息。

type:表示接受方式或者跳转方式是(默认是dispathcher请求转发,所以之前我们一般不书写这个,但是这里下载需要更改stream)

2.对应的DownloadAction

@Override

public String execute() throws Exception {

return this.SUCCESS;

}

//这里的getEtoak要跟struts.xml里的inputName的值对应

public InputStream getEtoak() throws Exception {

return new FileInputStream(

ServletActionContext.getServletContext()

.getRealPath(“/image”)

+ “/”

+ this.getFilename());

}

Java下载问题,怎样让IE下载该文件,而不是打开该文件?

//·设置响应消息头,告诉浏览器当前响应是一个下载文件

response.setContentType( “application/x-msdownload”);

//考虑到文件名中可能包含非ASCII码字符,所以应该进行编码后再传输

fileName = URLEncoder. encode(fileName, “UTF-8”);

//告诉浏览器,当前响应数据要求用户干预保存到文件中,以及文件名是什么

response.setHeader( “Content-Disposition”, “attachment;filename=” +fileName);

Java 下载文件的方法怎么写

参考下面

public HttpServletResponse download(String path, HttpServletResponse response) {

try {

// path是指欲下载的文件的路径。

File file = new File(path);

// 取得文件名。

String filename = file.getName();

// 取得文件的后缀名。

String ext = filename.substring(filename.lastIndexOf(“.”) + 1).toUpperCase();

// 以流的形式下载文件。

InputStream fis = new BufferedInputStream(new FileInputStream(path));

byte[] buffer = new byte[fis.available()];

fis.read(buffer);

fis.close();

// 清空response

response.reset();

// 设置response的Header

response.addHeader(“Content-Disposition”, “attachment;filename=” + new String(filename.getBytes()));

response.addHeader(“Content-Length”, “” + file.length());

OutputStream toClient = new BufferedOutputStream(response.getOutputStream());

response.setContentType(“application/octet-stream”);

toClient.write(buffer);

toClient.flush();

toClient.close();

} catch (IOException ex) {

ex.printStackTrace();

}

return response;

}

// 下载本地文件

public void downloadLocal(HttpServletResponse response) throws FileNotFoundException {

String fileName = “Operator.doc”.toString(); // 文件的默认保存名

// 读到流中

InputStream inStream = new FileInputStream(“c:/Operator.doc”);// 文件的存放路径

// 设置输出的格式

response.reset();

response.setContentType(“bin”);

response.addHeader(“Content-Disposition”, “attachment; filename=\”” + fileName + “\””);

// 循环取出流中的数据

byte[] b = new byte[100];

int len;

try {

while ((len = inStream.read(b)) 0)

response.getOutputStream().write(b, 0, len);

inStream.close();

} catch (IOException e) {

e.printStackTrace();

}

}

// 下载网络文件

public void downloadNet(HttpServletResponse response) throws MalformedURLException {

int bytesum = 0;

int byteread = 0;

URL url = new URL(“windine.blogdriver.com/logo.gif”);

try {

URLConnection conn = url.openConnection();

InputStream inStream = conn.getInputStream();

FileOutputStream fs = new FileOutputStream(“c:/abc.gif”);

byte[] buffer = new byte[1204];

int length;

while ((byteread = inStream.read(buffer)) != -1) {

bytesum += byteread;

System.out.println(bytesum);

fs.write(buffer, 0, byteread);

}

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

//支持在线打开文件的一种方式

public void downLoad(String filePath, HttpServletResponse response, boolean isOnLine) throws Exception {

File f = new File(filePath);

if (!f.exists()) {

response.sendError(404, “File not found!”);

return;

}

BufferedInputStream br = new BufferedInputStream(new FileInputStream(f));

byte[] buf = new byte[1024];

int len = 0;

response.reset(); // 非常重要

if (isOnLine) { // 在线打开方式

URL u = new URL(“” + filePath);

response.setContentType(u.openConnection().getContentType());

response.setHeader(“Content-Disposition”, “inline; filename=” + f.getName());

// 文件名应该编码成UTF-8

} else { // 纯下载方式

response.setContentType(“application/x-msdownload”);

response.setHeader(“Content-Disposition”, “attachment; filename=” + f.getName());

}

OutputStream out = response.getOutputStream();

while ((len = br.read(buf)) 0)

out.write(buf, 0, len);

br.close();

out.close();

}

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年3月24日 20:30:47
下一篇 2024年3月24日 20:39:40

相关推荐

  • 深入java虚拟机pdf,深入java虚拟机 中村成洋 pdf

    在linux环境下,java怎么实现从word格式转换为pdf格式 //设置当前使用的打印机,我的Adobe Distiller打印机名字为 Adobe PDF wordCom.setProperty( ActivePrinter , new Variant( Adobe PDF ));//设置printout的参数,将word文档打印为postscript…

    2024年5月23日
    4400
  • java截取指定长度字符串,java截取指定字符串之后的

    java中如何截取字符串中的指定一部分 第一个参数是开始截取的字符位置。(从0开始)第二个参数是结束字符的位置+1。(从0开始)indexof函数的作用是查找该字符串中的某个字的位置,并且返回。 int end);截取s中从begin开始至end结束时的字符串,并将其赋值给s;split讲解:java.lang.string.split split 方法 将…

    2024年5月23日
    4200
  • java绑定一个端口,java使用端口

    java如何多个service共用一个端口 你如果有多个项目的话,你可以把多个项目放到一个tomcat里面,这样端口相同使用项目名称来进行区分项目。你如果非要使用同一个,你也可以配置不同的域名导向不同的项目。就是访问的域名不同转接到的项目不同。 如果需要同时启动多个程序,要么修改tomcat的配置文件中的监听端口。要么修改jar包程序的监听端口。不能在一台服…

    2024年5月23日
    3400
  • linux给文件写权限,linux怎么给文件权限

    linux宝塔写入权限不足 1、可以使用chmod命令修改权限。语法:chmod [-cfvR] [–help] [–version] mode file…说明 : Linux/Unix 的档案调用权限分为三级 : 档案拥有者、群组、其他。利用 chmod 可以藉以控制档案如何被他人所调用。 2、通过更改文件权限可以使用c…

    2024年5月23日
    5000
  • java多线程并发编程基础,Java多线程并发执行返回

    电脑培训分享Java并发编程:核心理论 电脑培训发现本系列会从线程间协调的方式(wait、notify、notifyAll)、Synchronized及Volatile的本质入手,详细解释JDK为我们提供的每种并发工具和底层实现机制。 人们开始意识到了继承的众多缺点,开始努力用聚合代替继承。软件工程解决扩展性的重要原则就是抽象描述,直接使用的工具就是接口。接…

    2024年5月23日
    4600
  • 自学java找工作,自学java找工作需要包装简历吗

    自学java学多久可以找到工作 1、自学Java至少需要一年以上的时间才能达到找工作的水平。报班培训四到六个月的时间就可以找到一份不错的工作。 2、自学Java至少需要一年以上的时间才能达到找工作的水平。 3、如果要想找到一份Java相关的工作,需要至少学习5-6个月时间才能就业。Java开发需要掌握一些基础的编程语言知识,比如掌握面向对象的编程思想、基本的…

    2024年5月23日
    4200
  • 包含c语言对txt文件命名的词条

    如何在C语言编程里面修改源文件名字 如果你是在WINDOWS的话,简单了,随便用个编辑器,比如记事本,然后写c源程序,保存到你想要保存的位置。如果你在DOS下,可以用edit,写好以后,按alt键,选择文件菜单,然后保存。 用open打开文件,注意操作模式使用“修改”或者“添加” 用write或者fprintf向文件中写入你的内容。 用close关闭文件。 …

    2024年5月23日
    4800
  • java左移右移,java 左移

    java位移问题 1、思路:直接用Integer类的bit运算操作。 2、移位操作:左移:向左移位,符号后面的数字是移了多少位,移的位用0补齐,例如2进制数01111111左移一位后变为11111110,移位是字节操作。 3、Java 位运算 Java 位运算[转]一,Java 位运算表示方法: 在Java语言中,二进制数使用补码表示,最高位为符号位,正数的…

    2024年5月23日
    4100
  • java技术规范,java规范性要求

    现在主流的JAVA技术是什么? java最流行开发技术程序员必看 1 、Git Git一直是世界上最受欢迎的Java工具之一,也是Java开发人员最杰出的工具之一。Git是一个开源工具,是-种出色的分布式版本控制解决方案。 (1).Java基础语法、数组、类与对象、继承与多态、异常、范型、集合、流与文件、反射、枚举、自动装箱和注解。(2).Java面向对象编…

    2024年5月23日
    3900
  • c语言多文件调用,c语言多文件操作

    c语言一个结构体如何在多个源文件里面调用? 在这种方法中,可以先将多个源文件分别编译成目标文件,然后再将它们链接成一个可执行文件。 在头文件里定义结构,例如:typedef struct { int a, b;} S;S s_instance;在其他文件里引用就可以。 创建程序入口点main函数,在main函数中条用其它函数。达到同时运行的母的。如果不这样,…

    2024年5月23日
    4100

发表回复

登录后才能评论



关注微信