使用SmartUpload下载:
下载代码(更改后,可以下载ZIP文件,需要SmartUpload组件):
//设置转发的编码格式
request.setCharacterEncoding("utf-8");
long codeId = Integer.parseInt(request.getParameter("codeId"));
ICodeService iCodeService = Factory.getCodeServiceImpl();
Code code = new Code(codeId);
//查询数据
Code down = iCodeService.codeSelect(code);
SmartUpload su = new SmartUpload();
su.initialize(getServletConfig(), request, response);
try {
su.downloadFile(down.getCodePath());
} catch (SmartUploadException e) {
e.printStackTrace();
}
可以不用看(旧的,之前可以实现后面不行了,下载的ZIP文件为0KB)
(保存下来,算是一个纪念)
昨天提到要把下载功能实现,但我并不是将文件上传到服务器的相对路径,是将文件保存在绝对路径的文件夹里。
也确实可以这样干,所以刚开始我是想使用IO流读取文件,再进行写入,想法很好,但是由于我上传保存的是压缩文件,只能下载一个文件名的文件,压缩的数据不能一起下载下来,进行了一番查找,还是顺利的解决了这个小问题。
下载要使用 a:href 或 form
我的下载代码:
//设置转发的编码格式
request.setCharacterEncoding("utf-8");
long codeid = Integer.parseInt(request.getParameter("codeid"));
ICodeService iCodeService = new CodeServiceImpl();
Code code = new Code(codeid);
//查询数据
Code down = iCodeService.codeSelect(code);
//下载必写 消息头
response.addHeader("content-Type","application/octet-stream");
response.addHeader("content-Disposition","attachement;filename="+down.getCodename());
//将本地文件的路径传到File
File file = new File(down.getCodepath());
if(file.exists()){
//使用输入流读取文件信息
InputStream in = new FileInputStream(file);
//先将文件传到BufferedInputStream的缓冲区内
BufferedInputStream bf = new BufferedInputStream(in);
//输出文件
OutputStream os = response.getOutputStream();
byte[] data = new byte[1024];
int len = 0;
while((len = bf.read(data))!=-1){
//写入数据
os.write(data,0,len);
}
}else {
System.out.println("下载失败"); //测试用
}
}