struts2下载多种类型的文件result里的<param name="contentType">textplain<param>如何设置?

struts2下载多种类型的文件result里的<param name="contentType">textplain<param>如何设置?,第1张

<param name="contentType">application/octet-stream</param>

要是想知道所有文件类型,可以在tomcat安装目录下的:conf目录下的web.xml文件里边,往下翻,全部的文件类型都在里边!

分析下,如果你要下载某个文件需要向服务器发送请求,然后会在客户端与服务器之间建立一个HTTP连接,服务器接收到你的请求后,向response中写入你要下载的内容,并且由于安全策略的原因,浏览器客户端每次下载文件都会d出保存对话框。

也就是说,如果你要下载文件夹下的所有文件,你就需要对所有文件都发送请求,并且挨个选择保存位置。

如果要解决上面的问题,你可以按照下面的方式做。

1、建立一个servlet(structs2下应该是action吧),用来接收用户的请求。

2、根据用户的请求,将要下载的内容使用org.apache.tools.zip包下的类进行打包(JDK下也有相应的ZIP处理的类,不过它对于中文的文件名处理有问题)。

注:构造ZipOutputStream时使用HttpServletResponse.getOutputStream()构造。这样向ZipOutputStream中写入的内容,客户端就能直接获取。

以上,希望对你的帮助,可以的话,请采纳。

Struts2下载文件实现的说明

contentType

内容类型,和互联网MIME标准中的规定类型一致,例如text/plain代表纯文本,text/xml表示XML,image/gif代表GIF图片,image/jpeg代表JPG图片

inputName

下载文件的来源流,对应着action类中某个类型为Inputstream的属性名,例如取值为inputStream的属性需要编写getInputStream()方法

contentDisposition

文件下载的处理方式,包括内联(inline)和附件(attachment)两种方式,而附件方式会d出文件保存对话框,否则浏览器会尝试直接显示文件。取值为:

attachmentfilename="struts2.txt",表示文件下载的时候保存的名字应为struts2.txt。如果直接写filename="struts2.txt",那么默认情况是代表inline,浏览器会尝试自动打开它,等价于这样的写法:inlinefilename="struts2.txt"

bufferSize

下载缓冲区的大小

1 使用Struts2控制文件下载

可能很多人会觉得,文件下载太简单,直接在页面上给出一个超级链接,该链接的href属性等于要下载文件的文件名,不就可以实现文件下载了吗?大部分时候的确可以实现文件下载,但如果该文件的文件名为中文文件名,则会导致下载失败;或者应用程序需要在让用户下载之前进行进一步检查,比如判断用户是否有足够权限来下载该文件等。

看下面的一个原始的下载页面代码片段:

<h1>原始的下载</h1>

<ul><li>

<!-- 包含中文文件名的下载链接 -->

下载Struts2的Logo:<a href="images/中.gif">下载图形文件</a>

</li><li>

下载Struts2的Logo的压缩文件:<a href="images/struts-gif.zip">下载压缩文件</a>

</li></ul>

上面页面的包含两个下载的超级链接,两个链接的资源都是存在的,但因为第一个资源文件的文件名是中文文件名,如果单击第一个超级链接,将出现如下图所示的页面。

从图中页面中椭圆形框包围的地方,我们看到被下载的文件名变成了包含大量%的字符串,很明显,这种文件名显然无法取得需要下载的文件

2。使用action下载

action页面代码:

package download

import java.io.*

import org.apache.struts2.ServletActionContext

import com.opensymphony.xwork2.ActionSupport

public class DownLoad extends ActionSupport {

private StringinputPath

private StringcontentType

private String filename

public String getContentType() {

return contentType

}

public void setContentType(String contentType) {

this.contentType = contentType

}

public String getFilename() {

return filename

}

public void setFilename(String filename) {

this.filename = filename

}

public String getInputPath() {

return inputPath

}

public void setInputPath(String inputPath) {

this.inputPath = inputPath

}

public InputStream getInputStream() throws Exception

{

return ServletActionContext.getServletContext().getResourceAsStream(inputPath)

}

@Override

public String execute() throws Exception {

inputPath="/UploadImages/che.jpg"//要下载的文件名称

filename="test.jpg"//保存文件时的名称

contentType="image/jpeg"//保存文件的类型

return SUCCESS

}

Struts.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC

"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

<package name="default" extends ="struts-default">

<action name="filedownload" class="download.DownLoad">

<result name="success" type="stream">

<param name="contentType">${contentType}</param>

<param name="inputName">inputStream</param>

<param name="bufferSize">4096</param>

<param name="contentDisposition">filename="${filename}"</param>

<param name=""></param>

</result>

</action>

</package>

</struts>

jsp.页面

<%@ page contentType="text/htmlcharset=gb2312"%>

<%@ taglib prefix="s" uri="/struts-tags"%>

<html>

<head>

<title>下载</title>

</head>

<body>

<a href='<s:url value="filedownload.action"/>'>下载</a>

</body>

</html>


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12093303.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存