日期:2014-05-19  浏览次数:20799 次

jsp 上传 下载 文件夹功能
求教各位 ,jsp实现上传下载 文件 ,文件夹
 或者在jsp层面实现将文件夹压缩打包,然后上传到服务器,在服务器进行解压缩,服务器端会有一个临时文件夹来存放这些上传的文件。
 同样的道理,将服务器端的文件夹,不压缩,直接下载,如何做?

求高手指导。。。

------解决方案--------------------
文件夹不能直接上传和下载。
如果上传文件夹的话,可以考虑把文件夹里的文件上传到服务器,然后再服务器创建跟本地相同的文件夹结构。。

下载的话,只能把文件压缩成压缩包然后下载。难道你见过有下载文件夹的页面???
------解决方案--------------------
同意楼上说法,文件上传与下载,叫都叫“文件”,换成是文件夹怎么可能。
你可能看到别人的文件夹能上传,其实际他是进行了处理的,他会获得你的文件夹的路径,然后在后台用递归,把文件夹里面的文件都上传到本地。你以为是直接将文件夹上传呀,那是不可能的!
他们的原理都是文件流,文件流,说白了就是对文件的操作。
你现在直接想要上传文件夹或者下载,那是不行的,你要进行处理,去看看递归把,我也没有做个这样的上传!

------解决方案--------------------
首先在java框架里面,如果你先定义好文件传输成功或失败两种状态,文件的批量上传不会因为某个文件传输失败而导致整个传输过程失效,这个可以用程序控制提示哪个文件传输失败,然后另传就可以了。
其次文件的批量下载是可以的,方法正如1楼所说,将要下载的文件压缩后下载就可以了。
------解决方案--------------------

LZ想法很好。我来帮你实现:
首先通过压缩方式:

/***************************************************************************
 * 压缩文件
 * 
 * @author Louis
 * @param srcfile
 *            需要压缩的文件列表
 * @param zipfile
 *            压缩后的文件
 * @author Louis
 */
public static void ZipFiles(java.io.File[] srcfile, java.io.File zipfile) {
byte[] buf = new byte[1024];
try {
// Create the ZIP file
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(
zipfile));
// Compress the files
for (int i = 0; i < srcfile.length; i++) {
FileInputStream in = new FileInputStream(srcfile[i]);
// Add ZIP entry to output stream.
out.putNextEntry(new ZipEntry(srcfile[i].getName()));
// Transfer bytes from the file to the ZIP file
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
// Complete the entry
out.closeEntry();
in.close();
}
// Complete the ZIP file
out.close();

} catch (IOException e) {
e.printStackTrace();
}
}

/***************************************************************************
 * 解压缩文件
 * 
 * @author Louis
 * @param zipfile
 *            需要解压缩的文件
 * @param descDir
 *            解压后的文件目录
 * @author Louis
 */
public static void UnZipFiles(java.io.File zipfile, String descDir) {
try {
// Open the ZIP file
ZipFile zf = new ZipFile(zipfile);
for (Enumeration entries = zf.entries(); entries.hasMoreElements();) {
// Get the entry name
ZipEntry entry = ((ZipEntry) entries.nextElement());
String zipEntryName = entry.getName