网站方式上传下载分两种,一种是附件在本项目里,第二种是附件不再项目,在另外一台机器上;
第一种: 附件在本项目里:可以直接设置超链接的相对路径;
第二种:附件和应用不再同一台机器,通过ftp方式下载
如果想要点击下载,然后弹出一个下载对话框,页面又不会打开附件,这个需要在web.xml 中修改,设置mime-mapping,如下所示:
<mime-mapping>
<extension>xlsx</extension>
<mime-type>application/msexcel</mime-type>
</mime-mapping>
<mime-mapping>
<extension>xls</extension>
<mime-type>application/msexcel</mime-type>
</mime-mapping>
然后设置一个超链接 <a href="fileListAction!download.do">下载</a></br>
接下来就是struts的action代码了:
HttpServletResponse response = ServletActionContext.getResponse();
HttpServletRequest request = ServletActionContext.getRequest();
String formno = request.getParameter("formno");
String fileName = request.getParameter("name");
FTPClient ftpClient = new FTPClient();
OutputStream os = response.getOutputStream();;
String ip = DefaultSettings.get("ws.linktrust.nesafechekckin.ftpeurl");
int port = 21;
String username = DefaultSettings.get("username");
String password = DefaultSettings.get("password");
String remotePath = DefaultSettings.get("ftpepath");
ftpClient.setControlEncoding("GBK");
FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_NT);
conf.setServerLanguageCode("zh");
ftpClient.connect(ip, port);
ftpClient.login(username, password);
int reply = ftpClient.getReplyCode();
boolean b = FTPReply.isPositiveCompletion(reply);
if (!b) {
throw new Exception("连接服务器失败");
}
boolean bf = ftpClient.changeWorkingDirectory(remotePath+formno);
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
//此句代码尤为重要
response.setHeader("Content-disposition","attachment;filename="+ URLEncoder.encode(fileName, "utf-8"));
ftpClient.retrieveFile(new String(fileName.getBytes("GBK"),"ISO-8859-1"), os);
System.out.println("size:"+ os);
os.flush();
os.close();
ftpClient.logout();
return "download";
Struts配置文件:
<action name="fileListAction" class="XXXXAction">
<result name="fileinfo">/jsp/filelist.jsp</result>
<result name="download" type="stream"></result>
</action>