您的位置:首页 > 编程语言 > Java开发

java-flex 批量下载文件-压缩下载

2016-11-11 14:46 435 查看
参考了 http://ljy-888.iteye.com/blog/1695024  得到启发 ,非常感谢。

Ftp上的文件 可以将数据传到前台 进行压缩

效果还不错

主要思路:

获取文件 以 List<byte[] >形式传值到前台 
前台获取数组,并将其进行压缩

中间可能出现中文乱码 要处理

java代码:

/*
ftpClient ftp地址
path:路径
filename:文件名称
*/
public byte[] getFtpFileData(FtpClient ftpClient, String path,
String fileName) throws IOException {
byte[] bytes = new byte[1024];
try {
if (path != null && path.length() != 0) {
//在文件所在目录下
ftpClient.cd(path);
}
ftpClient.binary();//切换传输方式为二进制
TelnetInputStream tis = ftpClient.get(fileName);
ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
int bufsize = 0;
while ((bufsize = tis.read(bytes)) != -1) {
byteOut.write(bytes, 0, bufsize);
}
byte[] return_data = byteOut.toByteArray();
byteOut.close();
tis.close();
return return_data;
} catch (IOException ex) {
System.out.println(e);
}
return null;
}
/*filenamelist 文件名称  */
public  List<byte[]> download(String ip,int port,String user,String password,List<String> filenamelist) {

FtpClient ftpClient = new FtpClient();

FileProsser fp = new FileProsser();

try {
/*ftpClient.openServer(ip, port);  也可以用的*/
ftpClient = new FtpClient(ip);
ftpClient.login(user, password);

for(int k=0;k<filenamelist.size();k++){
return_list.add(getFtpFileData(ftpClient, IConstant.FTP_PATH,
filenamelist.get(k).toString()));//添加文件
byte[] names=filenamelist.get(k).toString().getBytes("UTF-8");//中文乱码
System.out.println(new String(names,"UTF-8"));
return_list.add(names);..
}
return return_list;
} catch (IOException e) {
e.printStackTrace();
}

return null;
}

flex代码:

前天获取传参后 获取对应的数据结果,处理的代码如下:

private function closeFtpHandler(event:ResultEvent) : void
{
var fileData:ArrayCollection=event.result as ArrayCollection;
if(fileData==null || fileData.length<1){
Alert.show("无附件可供下载,请重新选择","提示",Alert.OK,this,null);
}else{
//前台压缩
var zip:FZip = new FZip();
for(var z:int=0;z<fileData.length;z++){
var bytes:ByteArray=fileData.getItemAt(z+1) as ByteArray;
bytes.position=0;
zip.addFile(bytes.readUTFBytes(bytes.length),fileData.getItemAt(z) as ByteArray);
z++;
}
var zipData:ByteArray = new ByteArray();
zip.serialize(zipData);
var file:FileReference=new FileReference();
var format:DateFormatter=new DateFormatter();
format.formatString="YYYY-MM-DD-JJNNSS";
format.format(new Date());
file.save( zipData,format.format(new Date())+ ".zip" );
}

}

结果展示:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: