您当前的位置:首页 > 美文摘抄 > 内容

content disposition(java导出功能response.setHeader(“Content-disposition先运行js脚本,在线等)

本文目录

  • java导出功能response.setHeader(“Content-disposition先运行js脚本,在线等
  • http协议中content-disposition为form-data;name=;是什么意思
  • Content-disposition中Attachment和inline的区别
  • http header中是否有content-disposition字段
  • http协议中content-disposition 为form-data;name=;表示什么意思
  • 怎么使用添加content-disposition
  • contentdisposition怎么 传 参数
  • 得到file的文件名和存储路径后,在Struts2中的action中要怎样获取file的内容并显示到action转到的jsp页面中

java导出功能response.setHeader(“Content-disposition先运行js脚本,在线等

你似乎弄错了 HTTP 流程,怎么可以在已经开始输出资料到 Response 的 OutputStream /Writer 之后再来 response.setHeader() 呢,这会得到 IllegalStateException 无效状态错误。出现在 JSP 中的非 《% %》 内的内容相当于 out.println(); 输出的。因此我们要么在最开始(前面连一个空格都没有)的位置《% %》 中准备 Header 内容。Header 应该在准备写出实际内容之前完成,因为 out.println() 或 JSP 中的 HTML/CSS/JS 都是 Body 的内容, Header 应该在 Body 之前完成。HTTP 通信的过程是先是 URL 请求和状态码,然后是各种Header,再是一个空行隔开,再是BODY内容。这里说的 Body 不是指《body》 标签,连 《head》 标签都是 HTTP Body 的内容。另外要知道 《% %》 的代码在服务器就已经计算后固定下来再送到客户端浏览器的,所以你在 js 运行的时候 《% %》 计算的任何文本值已经确定了,因为 js 是运行在客户端浏览器中的,这个时刻已经与服务器没有任何关系了。如果你想下载这个文件的话,这个 Content-disposition 应该是由服务器来填充的,要知道在 js 中只是计算文件下载的 URL,真实的下载过程是另外再开一个 请求的 (新的 HttpServletRequest) 。而我们的 js 只需要计算出来文件下载的 URL 之后 window.open(...) 打开这个URL ,浏览器就会自动的弹出下载。

http协议中content-disposition为form-data;name=;是什么意思

3、multipart/form-data的请求头必须包含一个特殊的头信息:Content-Type,且其值也必须规定为multipart/form-data,同时还需要规定一个内容分割符用于分割请求体中的多个post的内容,如文件内容和文本内容自然需要分割开来,不然接收方就无法正常解析和还原这个文件了

Content-disposition中Attachment和inline的区别

Content-disposition中Attachment和inline的区别如下:inline 对于一些本地装有相应可以打开的软件,并且关联的,浏览器会尝试直接打开查看,不提示下载,attachment则会提示下载,当然也会因不同的浏览器和不同设置而不同java web中下载文件时,我们一般设置Content-Disposition告诉浏览器下载文件的名称,是否在浏览器中内嵌显示.Content-disposition: inline; filename=foobar.pdf表示浏览器内嵌显示一个文件 Content-disposition: attachment; filename=foobar.pdf表示会下载文件,如火狐浏览器中spring mvc中Java代码 收藏代码@ResponseBody @RequestMapping(value = “/download“,produces=“application/octet-stream“) public byte downloadFile(HttpServletRequest request, HttpServletResponse response,String contentType2) throws IOException { bytebytes=FileUtils.getBytes4File(“D:\\Temp\\cc.jpg“); response.addHeader(“Content-Disposition“, “inline;filename=\“a.jpg\““); return bytes; } 如上代码中是内嵌显示图片呢?还是会弹框下载呢?答案是:弹框下载为什么呢?设置为inline应该是内嵌显示啊!因为response content type设置成了“application/octet-stream“注意:我们说是内嵌显示还是下载,那一定是针对可内嵌显示的类型,例如“image/jpeg“,“image/png“等. 看下面的例子:设置response content type为“image/jpeg“Java代码 收藏代码@ResponseBody @RequestMapping(value = “/download“,produces=“image/jpeg“) public byte downloadFile(HttpServletRequest request, HttpServletResponse response,String contentType2,String downloadType) throws IOException { bytebytes=FileUtils.getBytes4File(“D:\\Temp\\cc.jpg“); response.addHeader(“Content-Disposition“, downloadType+“;filename=\“a.jpg\““); return bytes; } 在浏览器中访问:http://localhost:8080/tv_mobile/video/download?downloadType=inline 时就内嵌显示:

http header中是否有content-disposition字段

Content-disposition 是 MIME 协议的扩展,MIME 协议指示 MIME 用户代理如何显示附加的文件。Content-disposition其实可以控制用户请求所得的内容存为一个文件的时候提供一个默认的文件名,文件直接在浏览器上显示或者在访问时弹出文件下载对话框。格式说明:content-disposition = “Content-Disposition“ “:“ disposition-type *( “;“ disposition-parm )  字段说明:Content-Disposition为属性名disposition-type是以什么方式下载,如attachment为以附件方式下载disposition-parm为默认保存时的文件名。

http协议中content-disposition 为form-data;name=;表示什么意思

3、multipart/form-data的请求头必须包含一个特殊的头信息:Content-Type,且其值也必须规定为multipart/form-data,同时还需要规定一个内容分割符用于分割请求体中的多个post的内容,如文件内容和文本内容自然需要分割开来,不然接收方就无法正常解析和还原这个文件了

怎么使用添加content-disposition

在进行Web开发时,可能遇到遇到以下几种需求:  l希望某类或者某已知MIME类型的文件(比如:*.gif;*.txt;*.htm)能够在访问时弹出逗文件下载地对话框。  l希望客户端下载时以指定文件名显示。  l希望某文件直接在浏览器上显示而不是弹出文件下载对话框。  对于上面的需求,使用Content-Disposition属性就可以解决。下面是代码示例:  response.setHeader(“Content-disposition“,“attachment;filename=“+fileName)。  //Content-disposition为属性名。  //attachment表示以附件方式下载。如果要在页面中打开,则改为inline。  //filename如果为中文,则会出现乱码。解决办法有两种:  //1、使用fileName=newString(fileName.getBytes(),“ISO8859-1“)语句  //2、使用fileName=HttpUtility.UrlEncode(filename,System.Text.Encoding.UTF8)语句

contentdisposition怎么 传 参数

在网络编程过程中需要向服务器上传文件。Multipart/form-data是上传文件的一种方式。 Multipart/form-data其实就是浏览器用表单上传文件的方式。最常见的情境是:在写邮件时,向邮件后添加附件,附件通常使用表单添加

得到file的文件名和存储路径后,在Struts2中的action中要怎样获取file的内容并显示到action转到的jsp页面中

struts2单文件上传:首先是一个jsp文件上传页面,这个比较简单,就是一个表单,里面有个文件上传框《!--在进行文件上传时,表单提交方式一定要是post的方式,因为文件上传时二进制文件可能会很大,还有就是enctype属性,这个属性一定要写成multipart/form-data,不然就会以二进制文本上传到服务器端--》《form action=“fileUpload.action“ method=“post“ enctype=“multipart/form-data“》    username: 《input type=“text“ name=“username“》《br》 file: 《input type=“file“ name=“file“》《br》 《input type=“submit“ value=“submit“》 《/form》接下来是FileUploadAction部分代码,因为struts2对上传和下载都提供了很好的实习机制,所以在action这段我们只需要写很少的代码就行:public class FileUploadAction extends ActionSupport{ private String username;//注意,file并不是指前端jsp上传过来的文件本身,而是文件上传过来存放在临时文件夹下面的文件 private File file; //提交过来的file的名字 private String fileFileName; //提交过来的file的MIME类型 private String fileContentType; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public File getFile() { return file; } public void setFile(File file) { this.file = file; } public String getFileFileName() { return fileFileName; } public void setFileFileName(String fileFileName) { this.fileFileName = fileFileName; } public String getFileContentType() { return fileContentType; } public void setFileContentType(String fileContentType) { this.fileContentType = fileContentType; } @Override public String execute() throws Exception { String root = ServletActionContext.getServletContext().getRealPath(“/upload“); InputStream is = new FileInputStream(file); OutputStream os = new FileOutputStream(new File(root, fileFileName)); System.out.println(“fileFileName: “ + fileFileName);// 因为file是存放在临时文件夹的文件,我们可以将其文件名和文件路径打印出来,看和之前的fileFileName是否相同 System.out.println(“file: “ + file.getName()); System.out.println(“file: “ + file.getPath()); byte buffer = new byte; int length = 0; while(-1 != (length = is.read(buffer, 0, buffer.length))) { os.write(buffer); } os.close(); is.close(); return SUCCESS; }}首先我们要清楚一点,这里的file并不是真正指代jsp上传过来的文件,当文件上传过来时,struts2首先会寻找struts.multipart.saveDir(这个是在default.properties里面有)这个name所指定的存放位置,我们可以新建一个struts.properties属性文件来指定这个临时文件存放位置,如果没有指定,那么文件会存放在tomcat的apache-tomcat-7.0.29\work\Catalina\localhost\目录下,然后我们可以指定文件上传后的存放位置,通过输出流将其写到流里面就行了,这时我们就可以在文件夹里看到我们上传的文件了。文件上传后我们还需要将其下载下来,其实struts2的文件下载原理很简单,就是定义一个输入流,然后将文件写到输入流里面就行,关键配置还是在struts.xml这个配置文件里配置:FileDownloadAction代码如下:public class FileDownloadAction extends ActionSupport{public InputStream getDownloadFile(){return ServletActionContext.getServletContext().getResourceAsStream(“upload/通讯录2012年9月4日.xls“);}@Overridepublic String execute() throws Exception{return SUCCESS;}}我们看,这个action只是定义了一个输入流,然后为其提供getter方法就行,接下来我们看看struts.xml的配置文件:《action name=“fileDownload“ class=“com.xiaoluo.struts2.FileDownloadAction“》《result name=“success“ type=“stream“》《param name=“contentDisposition“》attachment;filename=“通讯录2012年9月4日.xls“《/param》《param name=“inputName“》downloadFile《/param》《/result》《/action》struts.xml配置文件有几个地方我们要注意,首先是result的类型,以前我们定义一个action,result那里我们基本上都不写type属性,因为其默认是请求转发(dispatcher)的方式,除了这个属性一般还有redirect(重定向)等这些值,在这里因为我们用的是文件下载,所以type一定要定义成stream类型,告诉action这是文件下载的result,result元素里面一般还有param子元素,这个是用来设定文件下载时的参数,inputName这个属性就是得到action中的文件输入流,名字一定要和action中的输入流属性名字相同,然后就是contentDisposition属性,这个属性一般用来指定我们希望通过怎么样的方式来处理下载的文件,如果值是attachment,则会弹出一个下载框,让用户选择是否下载,如果不设定这个值,那么浏览器会首先查看自己能否打开下载的文件,如果能,就会直接打开所下载的文件,(这当然不是我们所需要的),另外一个值就是filename这个就是文件在下载时所提示的文件下载名字。在配置完这些信息后,我们就能过实现文件的下载功能了。struts2多文件上传:其实多文件上传和单文件上传原理一样,单文件上传过去的是单一的File,多文件上传过去的就是一个List《File》集合或者是一个File数组,首先我们来看一下前端jsp部分的代码,这里我用到了jquery来实现动态的添加文件下载框以及动态的删除下载框:《script type=“text/javascript“ src=“script/jquery-1.8.1.js“》《/script》《script type=“text/javascript“》$(function(){$(“#button“).click(function(){var html = $(“《input type=’file’ name=’file’》“);var button = $(“《input type=’button’ name=’button’ value=’删除’》《br》“);$(“#body div“).append(html).append(button);button.click(function(){html.remove();button.remove();})})})《/script》《/head》《body id=“body“》《form action=“fileUpload2.action“ method=“post“ enctype=“multipart/form-data“》username: 《input type=“text“ name=“username“》《br》file: 《input type=“file“ name=“file“》《input type=“button“ value=“添加“ id=“button“》《br》《div》《/div》《input type=“submit“ value=“submit“》《/form》《/body》file的名字必须都命名成file才行,然后处理多文件上传的action代码如下:public class FileUploadAction2 extends ActionSupport{ private String username;//这里用List来存放上传过来的文件,file同样指的是临时文件夹中的临时文件,而不是真正上传过来的文件 private List《File》 file;//这个List存放的是文件的名字,和List《File》中的文件相对应 private List《String》 fileFileName; private List《String》 fileContentType; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public List《File》 getFile() { return file; } public void setFile(List《File》 file) { this.file = file; } public List《String》 getFileFileName() { return fileFileName; } public void setFileFileName(List《String》 fileFileName) { this.fileFileName = fileFileName; } public List《String》 getFileContentType() { return fileContentType; } public void setFileContentType(List《String》 fileContentType) { this.fileContentType = fileContentType; } @Override public String execute() throws Exception { String root = ServletActionContext.getServletContext().getRealPath(“/upload“); for(int i = 0; i 《 file.size(); i++) { InputStream is = new FileInputStream(file.get(i)); OutputStream os = new FileOutputStream(new File(root, fileFileName.get(i))); byte buffer = new byte; @SuppressWarnings(“unused“) int length = 0; while(-1 != (length = is.read(buffer, 0, buffer.length))) { os.write(buffer); } os.close(); is.close(); } return SUCCESS; }}这样同样将其写到一个输出流里面,这样我们就可以在文件夹里看到上传的多个文件了


声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,谢谢。

上一篇: 如何更改计算机名称 更改后有什么影响?我的主页怎么改不过来了

下一篇: 桌面图标有蓝底(桌面的图标有蓝底怎么去,救急、、、、)



推荐阅读

网站内容来自网络,如有侵权请联系我们,立即删除! | 软文发布 | 粤ICP备2021106084号