要是想知道所有文件的类型,可以在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>
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)