高分:用java实现服务器上多个文件先打包,然后下载,下载完成后删除包!

我想实现一个跟购物车一样的东西。把想下载的资源全部放到购物车里,购物车里存放的是文件的url,filename等,然后点击购物车的打包下载时候,根据路径把购物车里面的所有... 我想实现一个跟购物车一样的东西。把想下载的资源全部放到购物车里,购物车里存放的是文件的url,filename 等,然后点击购物车的打包下载时候,根据路径把购物车里面的所有文件进行打包,然后下载,下载完成后,删除服务器上残留的包!
我用的是struts2的commons-file做的上传跟下载!而且要保存的文件大多是图片跟视频类的,不可能放到数据库!
现在最难实现的,就是文件放在不同的文件夹内,怎么能把他们给整合打成一个包!
如果不能实现的话,就只能根据路径把所有文件复制到一个文件夹内,然后打包那个文件夹进行下载,下载后删除文件夹跟压缩包了。但是那样的话,会大大增加服务器的负荷!!!
展开
 我来答
digizer0
推荐于2016-04-04 · TA获得超过194个赞
知道小有建树答主
回答量:144
采纳率:0%
帮助的人:164万
展开全部
向压缩包里添加文件时直接把服务器上的文件用流读进来就行,不用非把文件放到同一个目录,用程序生成压缩包和用命令行工具是不一样的,不要想当然。 写了个示例程序,你可以参考一下。这个示例不使用临时文件,把 OutputStream os替换成你下载用的输出流就可以实现一边压缩一边下载。注意java.util.zip不支持非ascii文件名。想支持中文文件名可以用apache ant或其他的库。

import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class ZipTest {

public static void main( String[] args ) {
try {
writeZip();
} catch ( IOException e ) {
e.printStackTrace();
}
}

private static void writeZip() throws IOException {
String[] files = { "/ws/dir1/file1", "/ws/dir2/file2", "/ws/file3", "/pub/success.wav" };
OutputStream os = new BufferedOutputStream( new FileOutputStream( "/ws/archive.zip" ) );
ZipOutputStream zos = new ZipOutputStream( os );
byte[] buf = new byte[8192];
int len;
for ( String filename : files ) {
File file = new File( filename );
if ( !file.isFile() ) continue;
ZipEntry ze = new ZipEntry( file.getName() );
zos.putNextEntry( ze );
BufferedInputStream bis = new BufferedInputStream( new FileInputStream( file ) );
while ( ( len = bis.read( buf ) ) > 0 ) {
zos.write( buf, 0, len );
}
zos.closeEntry();
}
zos.close();
}

}
韡韡韡韡韡
2011-04-20 · TA获得超过221个赞
知道小有建树答主
回答量:330
采纳率:0%
帮助的人:236万
展开全部
jdk有个包--- java.util.jar
1 这个包里的类可以打包文件,具体做法可以参考API,看你的水平 通过API了解新类 应该不是问题了。
2 删除文件--不用说了吧,file.delete.....
3 下载就更加简单了, 用“流”将文件输出就可以了。

再不行??? 信息我吧。 但是不会给你源代码 只有给你思路了。
追问
现在最难实现的,就是文件放在不同的文件夹内,怎么能把他们给整合打成一个包!
如果不能实现的话,就只能根据路径把所有文件复制到一个文件夹内,然后打包那个文件夹进行下载,下载后删除文件夹跟压缩包了。但是那样的话,会大大增加服务器的负荷!!!
追答
不是吧 ,, 放在不同文件夹 也可以打包进去的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友39d817d
2011-04-20 · TA获得超过999个赞
知道小有建树答主
回答量:899
采纳率:0%
帮助的人:615万
展开全部
可以把这些url,name暂存到session里面
下载和上传可以使用插件jspsmart
很久没有使用了 稍微看一下API吧jspsmart就是把上传和下载的工作封装简化,所以使用非常简单的
下载完成后调用file.delete();就在服务器上删掉了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tq02ksu
2011-04-20 · TA获得超过103个赞
知道小有建树答主
回答量:139
采纳率:0%
帮助的人:77.9万
展开全部
如果文件不是很大的话可以用字节数组保存已经上传的文件信息, 和内容.
然后在直接输出打包后的文件. 供下载使用.

如果文件很大的话要用临时文件了.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式