本人最近有个项目要求要由管理员登录系统之后,可以将本地文件上传到服务器中,并且这些文件要在网页中显示,可以供别人下载,要用struts的技术。我现在已经可以实现上传文件的功能,但问题是文件上传之后要怎么样才能让这些上传的文件在规定的页面中显示,我这里是采用table,即原先没有文件时,表格为空。每上传一个文件,可以由管理员将该table增加一行,然后引入文件所在的位置,进行显示并供别人下载,我现在卡在这个地方了,不知道该怎么办?求助各位大神,帮帮忙啊,挺急的
struts 文件 上传 页面显示 下载
------解决方案--------------------
实现web文件下载应该和struts没关系。其实现有下面两种
1,就是你说的那种超链接的方式,超链接的地址就是要下载文件的位置。
例如<a href="../download/soplus.apk" >下载</a>
这种方式很不好,因为会暴露你的地址,带来很多不安全的因素
2, 页面下载
第一步 页面下载超链接
例如<a href="../download/down.jsp?docname=soplus.apk" >下载</a>
第二部 下载页面 主要代码
<%@page language="java" contentType="application/x-msdownload" pageEncoding="UTF-8"%>
<%
String docname = request.getParameter("docname");
String filedisplay = "";
response.setContentType("application/x-download");
String paths = pageContext.getServletContext().getRealPath("/");
String realPath = paths + "/download/";
String filedownload = realPath + docname;
filedisplay = URLEncoder.encode(filedisplay, "UTF-8");
response.addHeader("Content-Disposition", "attachment;filename=" + filedisplay);
//此处记得清理下。在释放在jsp中使用的对象时,会调用response.getWriter(),因为这个方法是和response.getOutputStream()相冲突的!
out.clear();
out = pageContext.pushBody();
OutputStream outp = null;
FileInputStream in = null;
try
{
outp = response.getOutputStream();
in = new FileInputStream(filedownload);
byte[] b = new byte[1024];
int i = 0;
while ((i = in.read(b)) > 0)
{
outp.write(b, 0, i);
}
outp.flush();
}
catch (Exception e)
{
System.out.println("Download Error!");
e.printStackTrace();
}
finally
{
if (in != null)
{
in.close();
in = null;
}
if (outp != null)
{
outp.close();
outp = null;
}
}
%>
------解决方案--------------------
可以这样做:
1 肯定有个上传文件的表,你每次上传一个文件,就吧这个文件的id,文件名以及存储路径存入表里面,其他需要的属性根据需求增加,
2 table中战士的就是这个表里面的数据,可以在文件名称上面加上超链接或增加点击事件
3 点击文件名称实现下载,根据文件名以及路径实现下载即可......