只需新建一个类继承抽象类HttpDownloadAction ,实现抽象方法getRootDirectory();同时将filename传进来即可。
HttpDownloadAction :
package com.---.downloadManager;
import java.io.File;
import java.io.FileInputStream;
import java.util.Map;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.opensymphony.webwork.interceptor.ServletRequestAware;
import com.opensymphony.webwork.interceptor.ServletResponseAware;
import com.opensymphony.xwork.ActionSupport;
import com.---.DownloadConfig;
public abstract class HttpDownloadAction extends ActionSupport
implements ServletResponseAware, ServletRequestAware {
public abstract String getRootDirectory();
private static final long serialVersionUID = 1L;
private HttpServletResponse response;
private HttpServletRequest request;
private String prefix;
private DownloadConfig downloadConfig;
private String filename;
private String message;
private String fileDir;
public String execute() throws Exception {
fileDir = this.getRootDirectory();
if (filename == null || filename.equals("")) {
message = "文件下载路径为空!";
return SUCCESS;
}
filename = new String(filename.getBytes("ISO-8859-1"),"UTF-8");
String fileDownLoadPath = getFileDownloadPath() ;
File file = new File(fileDownLoadPath);
if (!file.exists()) {
message = "文件" + filename + "不存在!";
return SUCCESS;
}
FileInputStream fis = null;
ServletOutputStream os = null;
try {
prefix = filename.substring(filename.lastIndexOf(".")+1).toLowerCase();
Map<String, String> str = downloadConfig.getResponseContentType();
response.setContentType(downloadConfig.getResponseContentType().get(prefix));
String userAgent = request.getHeader("User-Agent");
if(userAgent.indexOf("MSIE") != -1)
filename = "filename=" + java.net.URLEncoder.encode(filename,"UTF-8");
else
filename = "filename*=utf8''" + java.net.URLEncoder.encode(filename,"UTF-8");
response.setHeader("content-Disposition", "attachment;" + filename);
os = response.getOutputStream();
fis = new FileInputStream(fileDownLoadPath);
byte[] buff = new byte[1024];
int n = 0;
while ((n = fis.read(buff)) != -1) {
os.write(buff, 0, n);
}
return NONE;
} catch (Exception e) {
System.out.println(e+"...");
message = "文件" + filename + "不存在!";
} finally {
if(fis != null)
fis.close();
if(os != null)
os.flush();
}
return SUCCESS;
}
private String getFileDownloadPath() {
if(fileDir == null || fileDir.equals("")){
return filename;
}else{
return fileDir + "\\" + filename;
}
}
public void setServletResponse(HttpServletResponse reponse) {
response = reponse;
}
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
public DownloadConfig getDownloadConfig() {
return downloadConfig;
}
public void setDownloadConfig(DownloadConfig downloadConfig) {
this.downloadConfig = downloadConfig;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getFilename() {
return filename;
}
public void setFilename(String filename) {
this.filename = filename;
}
}
DownloadConfig:
package com.---.config;
import java.util.Map;
public class DownloadConfig {
private Map<String,String> responseContentType;
public Map<String, String> getResponseContentType() {
return responseContentType;
}
public void setResponseContentType(Map<String, String> responseContentType) {
this.responseContentType = responseContentType;
}
}
downloadConfig.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http//www.springframework.org/dtd/spring-beans.dtd">
<beans default-autowire="byName">
<bean id="downloadConfig" class="com.viathink.lims.center.config.DownloadConfig" singleton="true">
<!-- 下载文件时不同文件类型对应的response contentType配置 -->
<property name="responseContentType">
<map>
<entry key="doc"><value>application/msword</value></entry>
<entry key="xls"><value>application/vnd.ms-excel</value></entry>
<entry key="txt"><value>text/plain</value></entry>
</map>
</property>
</bean>
</beans>
分享到:
相关推荐
以上就是使用C#操作Word文档的基本步骤,包括根据模板生成文档、替换内容和插入表格。通过深入理解和实践,开发者可以创建出高效、灵活的文档自动化解决方案。在实际项目中,务必注意异常处理和资源管理,以确保程序...
3. **生成文档**:执行命令后,工具会解析DDL信息,生成对应的Markdown或Word文档。生成的文档会包含每个表的详细信息,包括表名、字段名、数据类型、主键、外键、注释等。 4. **查看和分享**:生成的文档可以直接...
这种技术广泛应用于报表导出、在线订单确认、合同生成等场景,用户可以在网页上操作后,直接下载生成的Word文档。 通过上述方法,我们可以用ASP有效地生成Word文档,满足多种业务需求。在实际开发中,还需要根据...
Spring REST Docs是一种用于生成API文档的工具,它通过在测试中记录HTTP请求和响应来生成文档。与Swagger不同,Spring REST Docs更侧重于自动化生成精确、详尽的API文档,而不仅仅是交互式文档。 结合这两个工具,...
Java作为一种广泛使用的编程语言,提供了多种方法来根据Word模板生成Word文档,而Jacob库就是其中一种非常实用且功能强大的解决方案。 #### Jacob库简介 Jacob(Java and COM Bridge)是一个开源的Java类库,它...
2. **直接生成PDF文档的方案**:这种方式不依赖于预先存在的模板,而是完全从零开始构建PDF文档。 接下来,我们将详细介绍这两类技术的具体实现过程。 #### 1. 基于模板进行包装的方案 **1.1 Acrobat表单及FDF...
在IT行业中,生成文档是开发过程中的重要环节,它能够帮助开发者理解代码结构、功能以及使用方法。`asdoc`是Adobe Flex SDK提供的一款工具,专门用于生成ActionScript和Flex项目的API文档。这篇博客“终于成功使用...
动态生成Word文档是IT行业中常见的需求,尤其是在自动化报告生成、数据导出或批量文档创建的场景下。本文将深入探讨如何使用C#语言来实现这一功能,以及在实际操作中需要注意的一些关键点。 首先,我们需要在项目中...
1. **通过系统路径下载**:这种方式适用于后台生成PDF后,直接保存到服务器的某个路径,然后提供URL给用户下载。以下是一个简单的示例: ```java import javax.servlet.http.HttpServletResponse; import java.io....
使用文档下载工具时,用户通常只需输入文档的URL,工具会自动抓取并处理,生成可下载的PDF文件。PDF(Portable Document Format)是一种通用的文件格式,能保持原始文档的布局和格式不变,无论在哪种设备上打开,都...
首先,你需要下载并安装`Sandcastle Help File Builder (SHFB)`,这是一个开源工具,用于生成基于.NET Framework的程序集的文档。你可以从其官方网站或其他可信源获取最新版本的SHFB。安装过程通常包括标准的Windows...
首先,OPC方式的报表生成主要涉及到以下几个关键知识点: 1. **OPC协议**:OPC是微软Windows环境下的一种标准,通过COM/DCOM技术实现工业设备与控制系统的数据通信。它定义了客户端和服务器之间的接口,使得不同...
Word从2003开始支持XML格式,用XML来做就很简单了。 大致的思路是先用office2003或者2007编辑好word的样式,然后另存为xml,将xml...关于FreeMarker模板编辑说明在我的资源中有中文文档,需要的朋友可以去下载。
5. **利用条件注释**:对于某些仅在特定条件下编译的代码,可以使用条件注释避免在不必要的地方生成文档。 总之,doxygen是提高代码可读性和团队协作效率的强大工具,熟练掌握其使用将对软件项目的文档管理大有裨益...
Oracle数据库表结构导出成Word...修改了一下数据库的连接方式:由于我安装的是win764位+office64+oracle client 32位,用MSDAORA.1无法连接,所以将MSDAORA.1换为OraOleDb.Oracle.1,换后正常连接数据库。 原作者: ...
完成后会得到一个扩展名为`.hhp`的文件,使用HTMLHelpWorkshop打开并编译,最终生成CHM文件。 - **生成图形**:首先安装Graphviz工具,然后在配置文件中指定`DOT_PATH`为Graphviz程序的安装路径(直到`\bin`目录)...
综上所述,这个任务涉及到了Word文档模板的使用、书签作为数据插入点、数据绑定、VBA编程自动化处理、文件生成、下载及打印等多个环节,是IT行业中提高效率、减少手动操作的经典案例。通过理解和掌握这些知识点,...
开发者需要根据实际开发需要和使用的编译工具来选择合适的下载方式。 最后,文档中提到的“2015.2.4李清晨”,可能是文档的编写日期或作者名字。由于OCR扫描技术的局限性,此处信息可能有误,但不影响主要内容的...