在一次项目实施中遇到客户提出对导出的单个文件进行分割为多个文件的需求,印象中未遇到过类似的文件导出功能。在网上搜索资料,研究struts2文件下载功能,未发现有支持此功能,但网上资料显示struts2支持批量文件下载功能,鉴于此思路实现代码如下。
配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD
Struts Configuration 2.1//EN"
"http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<package name="oltConfig" extends="json-default">
<action name="download" class="downLoadAction">
<result name="success" type="stream">
<param name="contentDisposition">
attachment;filename="${fileName}"
</param>
<param name="contentType">
application/octet-stream;charset=ISO8859-1
</param>
<param name="fileName">
struts2中文附件.txt
</param>
<param name="inputName">
downloadFile
</param>
</result>
</action>
</package>
</struts>
java 代码部分:
/**产生压缩文件函数
*/
public ByteArrayOutputStream baleZip(String[] names,String[] fileContents) throws IOException{
String temp = "导出文件失败,详情请查看日志!";
ByteArrayOutputStream bout = new ByteArrayOutputStream();
ZipOutputStream out = new ZipOutputStream(bout);
for(int i=0,len=fileContents.length;i<len;i++){
try {
out.putNextEntry(new ZipEntry(names[i]));
if(fileContents[i]!=null){
out.write(fileContents[i].getBytes());
}else{
out.write(temp.getBytes());
}
} catch (Exception e) {
e.printStackTrace();
}
}
out.flush();
out.close();
return bout;
}
/**返回下载文件流函数
*/
public InputStream getDownloadFile() {
String strResult [] = {} ;
String fileNames [] = new String [2];
String fileContents[] = new String [2];
String fileContent="";
String vendorName ="";
if(vendorId == 1){
vendorName = "zte";
}else if(vendorId == 2){
vendorName = "hw";
}else if(vendorId == 3){
vendorName = "fh";
}else if(vendorId == 4){
vendorName = "bell";
}
try {
if(vendorId.longValue() == 2){
strResult = this.genHwCmds(areaCode, frame, board, pon, svlan, vendorId, devModel,ip,upModel,downModel,
lineModel,busiModel,voicePri,ITMSPri,IPTVPri,netWorkPri);
}else if(vendorId.longValue() == 1){
strResult = this.genZteCmds(areaCode, frame, board, pon, svlan, vendorId, devModel, ip,upModel,downModel,onuType);
}else if(vendorId.longValue() == 4){
strResult = this.genBellCmds(areaCode, frame, board, pon, svlan, vendorId, devModel, ip, upModel, downModel);
}
fileContents[0] = strResult[1];
fileContents[1] = strResult[2];
if(strResult[0].trim().equals("1")){
fileContent = "导出文件内容失败,详情请查看日志!";
this.fileName = vendorName+devModel+ip+this.getDateStr(new Date())+".txt";
ByteArrayOutputStream output=new ByteArrayOutputStream();
output.write(fileContent.getBytes());
InputStream in = new ByteArrayInputStream(output.toByteArray());
log.info("导出文件成功!");
return in;
}else{
this.setFileName();
fileNames[0] = vendorName+devModel+ip+this.getDateStr(new Date())+"Add.txt";
fileNames[0] = new String(fileNames[0].getBytes("ISO8859-1"),"UTF-8");//对文件名编码
fileNames[1] = vendorName+devModel+ip+this.getDateStr(new Date())+"Del.txt";
fileNames[1] = new String(fileNames[1].getBytes("ISO8859-1"),"UTF-8");
ByteArrayOutputStream bout = this.baleZip(fileNames, fileContents);
InputStream in = new ByteArrayInputStream(bout.toByteArray());
log.info("导出文件成功!");
return in;
}
} catch (Exception ex) {
ex.printStackTrace() ;
log.info("导出文件异常!");
}
return null;
}
实现思路如下:利用ant.jar包里的文件压缩功能对多个文件进行压缩,把压缩输入流返回给struts2,然后进行下载。
注意事项:1、实现过程中,最好不要使用临时文件形式,避免在没有磁盘写权限时出现错误,利用类ByteArrayOutputStream 将文件内容转化为压缩文件输出流。
2、文件下载过程中,注意中文乱码问题,压缩文件实现方式最好调用ant.jar,不用java自带java.util.zip包,该包不支持压缩文件内含有中文名的文件(原因未研究)。
3、文件类型未知时,文件配置类型为application/octet-stream。
4、struts2导出文件大小有限制,可以在配置文件里修改默认大小。
分享到:
相关推荐
自己做的一个struts2 实现文件批量上传功能,
关于struts2的批量文件下载,文件的下载
Struts2文件批量上传,里面有很多的web包,每一个都是一个完整的项目,每个web包中都有详细的说明文档
Struts2文件批量上传.zip Struts2文件批量上传.zip Struts2文件批量上传.zip Struts2文件批量上传.zip Struts2文件批量上传.zip
很受网络上庞杂的Struts2上传下载的误导,很多没有解决中文乱码问题,本例实现了Struts2批量上传与下载,中文乱码问题完美解决,供大家参考!
struts1实现的文件批量上传,java实现
本案例是分为两种模式,单文件上传和多文件批量上传(可自动添加和减少上传文件的个数哦!) 欢迎交流吐槽。
NULL 博文链接:https://ninggy.iteye.com/blog/645307
基于当前最新版本Struts2.3的多文件批量上传与下载,直接上传到服务器路径下,未涉及数据库操作。对上传的文件类型进行过滤
通过产生临时文件下载之后,再通过线程删除临时文件
struts2 ajax 实现 批量上传文件(按ctr键 多选,并非多个文件选择输入框的),jar包太大删掉了 仅用了struts2 的jar包 加进去即可
struts2 批量上传 图片+ 文件 显示进度条
本demo实现了struts2批量上传文件,利用html5进行批量选择,然后利用struts2进行后台数据的上传并保存到数据库,适合商品图片的上传,需要的同学可以下载。
struts1 poi Excel批量导入支持xls和xlsx-源码java 有需要的能帮助到
NULL 博文链接:https://lovexuwenhao.iteye.com/blog/459064
Struts批量上传文件.doc Struts批量上传文件.doc Struts批量上传文件.docStruts批量上传文件.doc
3. 在struts2的Action通过2种不同的实现方法返回json格式的字符串。 4. 针对商品实现简单无刷新上传与下载 4. 批量导入数据采用的是导入test文件夹下的测试压缩包upload.rar上传到服务器的临时目录,然后利用WinRar....
struts2+ajax+jquery异步批量上传超大文件.zip struts2+ajax+jquery异步批量上传超大文件.zip struts2+ajax+jquery异步批量上传超大文件.zip struts2+ajax+jquery异步批量上传超大文件.zip struts2+ajax+jquery异步...
struts2+ajax+jquery异步批量上传超大文件,单文件最大支持2G,一次文件数量,文件大小都可设置。简单明了。绝对可用,稍微懂点的就可以修改为自己所用。你值得拥有! 我会分享给大家更多更好的东西,希望支持!
基于Struts2和Spring的网络硬盘系统,批量上传文件和在线解压,优秀源代码! 基于Struts2和Spring的网络硬盘系统,批量上传文件和在线解压,优秀源代码! 基于Struts2和Spring的网络硬盘系统,批量上传文件和在线...