开发思路:
1,要先数据库上查询到服务器上有的文件,遍历到list集合中在前端页面显示,给一个超链接提供下载,
2,建立和文件关联的输入流
3,建立和客户关联的输出流
4,一边读,一遍写
5,关闭输入输出流
开发步骤:
项目的整个目录结构还和文件上传的结构一致,
1,前端页面代码如下:
<h2>服务器文件、点击下载</h2>
<hr>
<s:iterator value="list" >
<a href="${pageContext.request.contextPath }/file/download?id=<s:property value="file_id" />"><s:property value="file_name" /></a></br>
</s:iterator>
2,后台Action代码为:
public String Download() {
System.out.println("-----"+id);
FileService service = new FileServiceImpl();
Fileupload f = service.SelOneFile(id);
// 1 在指定的目录下获取文件的绝对路径
HttpServletRequest request = ServletActionContext.getRequest();
ServletContext servletContext = request.getServletContext();
System.out.println(f.getFile_path());
String realPath = servletContext.getRealPath(f.getFile_path()+ f.getFile_name());
// 2 建立和文件关联的输入流
InputStream in = null;
OutputStream out = null;
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
in = new FileInputStream(realPath);
bis = new BufferedInputStream(in);
// 3 获取和client关联的输出流
HttpServletResponse response = ServletActionContext.getResponse();
// 告知浏览器文件的类型和使用方式
response.setContentType("text/plain");
response.setHeader("Content-Disposition", "attachment;filename="
+ URLEncoder.encode(f.getFile_name(), "utf-8"));
out = response.getOutputStream();
bos = new BufferedOutputStream(out);
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 4 一边读 一边写
while (true) {
int value;
try {
value = bis.read();
if (value == -1) {
break;
}
bos.write(value);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 5 关闭流
try {
bis.close();
bos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 注意:文件下载无需跳转
return null;
}
文件的下载需要先通过select * from t_file从数据库中查询到已经上传到服务器上的文件路径和文件名等。
然后点击下载的时候将所选文件的id传到后台,指定所要下载的单个文件,
然后通过文件输入输出流将文件复制到用户所在的电脑就完成了下载操作,