用truezip-6.jar可以解决中文名称和中文路径等问题,
因为用了 zipOut = new ZipOutputStream(out,"GBK");
用ant.jar有时会出现问题.
页面编码用:encodeURIComponent()
后台解码用:URLDecoder.decode(files[i],"UTF-8")
Action
引用
public ActionForward exportPicture(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
ServletOutputStream out = null;
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
PicService service = new PicService();
String fileName = request.getParameter("fileName"); //文件名
String filePath = request.getParameter("filePath"); //文件路径
String path=request.getSession().getServletContext().getRealPath("/");
if(fileName!=null && filePath != null){
response.reset();
response.setContentType("application/zip;charset=UTF-8");
response.setHeader("Content-Disposition" ,"attachment;filename="+new String("picture.zip".getBytes(),"iso-8859-1"));
out = response.getOutputStream();
String[] files = filePath.split(",");
String[] fileNS = fileName.split(",");
String zipFilePath = service.getZipFile(files,fileNS,path);
FileInputStream fin = new FileInputStream(zipFilePath);
// bis = new BufferedInputStream(fin);
bos = new BufferedOutputStream(out);
byte buff[] = new byte[2048];
int bytesRead;
while(-1 != (bytesRead = fin.read(buff, 0, buff.length)))
bos.write(buff, 0, bytesRead);
}
} catch (Exception e) {
log.error("导出图片出错", e);
} finally {
if(bis != null)
try {
bis.close();
} catch (IOException e) {
log.error("导出图片出错", e);
}
if(bos != null)
try {
bos.close();
} catch (IOException e) {
log.error("导出图片出错", e);
}
if (out != null)
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
log.error("导出图片出错", e);
}
}
return null;
}
Service
引用
public String getZipFile(String[] f,String[] fn,String path){
String[] files = f ;
String filePath =path+System.currentTimeMillis()+".zip";
FileInputStream in = null;
FileOutputStream out=null;
ZipOutputStream zipOut = null;
try
{
out = new FileOutputStream( filePath ); //创建文件输出流对象
zipOut = new ZipOutputStream(out,"GBK"); //创建ZIP数据输出流对象
ZipEntry entry;
int nNumber;
for ( int i=0; i<files.length;i++){ //创建文件输入流对象
String filePath_ = URLDecoder.decode(files[i],"UTF-8") ;
File file = new File(path+(filePath_.replace("/", "\\")));
if(file.exists()){
// in = new FileInputStream( baseUrl.getUploadPhotoRoot()+(files[i].replace("/", "\\")) );
in = new FileInputStream(file);
//创建指向压缩原始文件的入口
if(in!=null){
String temp = URLDecoder.decode(fn[i],"UTF-8")+"_" + String.valueOf(i)+filePath_.substring(filePath_.lastIndexOf("."));
// String cnName=URLDecoder.decode(fn[i],"UTF-8");
// String temp =cnName+String.valueOf(i)+filePath_.substring(filePath_.lastIndexOf("."));
//entry = new ZipEntry(files[i].substring(files[i].lastIndexOf("/")));
entry = new ZipEntry(temp);
zipOut.putNextEntry( entry );
//向压缩文件中输出数据
byte[] buffer = new byte[512];
while ((nNumber=in.read(buffer)) != -1)
zipOut.write(buffer,0,nNumber);
in.close();
}
}
}
// zipOut.close();
//out.close();
}
catch(IOException e)
{
log.error(e.getMessage());
}
finally{
try {
if(zipOut!=null){
zipOut.close();
}
if(out!=null){
out.close();
}
// // in.close();
} catch (IOException e) {
log.error(e.getMessage());
}
}
return filePath;
}
分享到:
相关推荐
在这个特定的压缩包文件中,"PDF2img"是一个基于PDFBox开发的DEMO,它设计用于解决PDF转图片时可能出现的中文乱码问题。 PDFBox是Apache软件基金会的一个开源项目,提供了丰富的API来读取、写入、修改PDF文档。在...
本文将深入探讨ZIP解压缩乱码的解决方案,帮助你解决这个问题。 1. **理解字符编码** - 字符编码是计算机存储和显示文本的方式,常见的有ASCII、GBK、UTF-8等。不同的编码方式对于特殊字符的表示不同,如果编码不...
"fastreport菜单中文乱码补丁.zip"这个压缩包文件显然针对的就是解决FastReport在处理中文菜单时可能出现的乱码问题。在Windows系统下,尤其是涉及到Unicode编码和非Unicode编码的转换时,这种问题尤为常见。补丁...
ArcMap 10.2解决中文乱码的主题,涉及到的是在该版本中如何正确显示和处理中文字符的技术细节。 首先,中文乱码通常是因为文件编码不匹配导致的。ArcMap默认使用的是ASCII或UTF-8编码,而某些数据源(如CAD文件)...
描述“JAVA 批量文件压缩为zip包下载需要用到ant.jar包Jar包下载地址:”表明了实现批量下载需要使用ant.jar包,并提供了下载地址。 标签解释 标签“java 批量下载”表明了该节的主题是关于Java语言实现批量下载的...
本项目名为“压缩工具类改良版(解决中文乱码)”,它专注于解决使用`ZipEntry`进行文件压缩时遇到的中文乱码问题。这个问题通常是由于字符编码不兼容导致的,特别是当默认编码与文件或系统使用的编码不一致时。这里...
针对这一需求,"帝国CMS7.2批量提取关键词包含utf和gbk版本.zip"提供了专门的解决方案。这个压缩包文件包含了适用于不同编码格式的工具,分别是简体GBK版和简体UTF-8版,旨在帮助用户高效地从帝国CMS7.2系统中批量...
在日本经常使用zip或者lha格式的压缩包,在中文系统下解压时,如果压缩包里的文件是日语名,虽然能正常解压,但是解出的文件会变成乱码。这实际上是日语系统使用Shift-JIS编码,在中文系统下解压时按照GB编码显示...
【批量下载】Ubuntu等.zip这个压缩包文件是一个专门为安卓用户准备的资源,旨在帮助他们将手机转变为小型Linux服务器,特别是为了运行Ubuntu操作系统。这为用户提供了在移动设备上体验Linux环境的可能性,例如用来...
博客中提到的`BatchDownload.java`可能是一个示例程序,它演示了如何结合这两个库来实现远程文件的批量下载并打包成ZIP文件。程序可能包含以下步骤: 1. **初始化HttpClient**:创建一个HttpClient实例,配置必要的...
批量下载的jar包,解决jdk自带包的中文乱码问题,org.apache.tools
标题"【批量下载】华为ADB一键卸载VS重装等.zip"暗示了这个压缩包包含了一系列针对华为设备的ADB相关工具,特别关注于应用的批量卸载和重装过程。这可能是一个集合,包括自动化脚本或应用程序,使得用户能够更方便地...
标题中的"【批量下载】AppleWirelessTrackpad64等.zip"表明这是一个包含多个与Apple无线设备相关的驱动程序或软件的压缩包,主要用于批量下载。关键词"AppleWirelessTrackpad64"暗示了主要涉及的是64位版本的苹果...
总之,"soft_ASP批量反编码特别版 .zip.zip"是一个专为ASP开发者设计的工具,帮助他们快速解决批量编码问题,提升开发和维护的效率。使用这个工具,开发者可以更专注于编写业务逻辑,而不必过于担心编码带来的困扰。
在转换过程中,它会确保中文字符在转换后不出现乱码,这是通过正确解析原始编码并重新写入新编码来实现的。乱码问题通常发生在编码不匹配的情况下,正确的转换工具能够避免这个问题。 使用批量文件转换器.exe的过程...
当我们需要处理大量文件,特别是从不同源获取的文件时,可能会遇到编码不一致的问题,这可能导致乱码或者无法正常读取。在这种情况下,批量修改编码的小工具就显得非常实用。 "批量修改编码的小工具"正如其名,是一...
总的来说,"GB-UTF8编码格式-批量转换工具.zip"提供了一个方便的解决方案,使得开发者能够轻松地在UTF-8和GB2312编码之间切换,这对于在不同编码环境之间工作的开发者或处理中文内容的项目尤为有用。同时,通过...
**SearchAndReplace6.5中文版本**是一款强大的文本处理工具,专为开发者和高级用户设计,用于高效地进行内容搜索和替换操作。它不仅具备基本的查找和替换功能,还支持批量搜索和批量替换,极大地提高了工作效率。...
3、插入删除中的位置以每个字来区分(很多改名工具是以字符来插入和删除,遇上汉字就会出现乱码,删除超过原名字数时,将操作无效) 4、修改时提示成功与失败 5、修改成功的将自行保存至软件文件夹中,方便查询...
"paper-assistant_master.zip" 可能是一个源代码或者预编译的程序包,用于智能地处理文本文件中的空行、空格和乱码。这样的工具通常会具有以下功能: 1. **删除空行**:在处理多来源合并的文献资料时,空行可能会无...