用struts技术做一个文件下载功能求大神帮助

 我来答
阿K第六季43uo
2014-07-20 · 超过53用户采纳过TA的回答
知道答主
回答量:102
采纳率:0%
帮助的人:123万
展开全部
public class FileDAction extends ActionSupport{ /** * */ private static final long serialVersionUID = 7298106283399178137L; /* * 文件下载方法 * pz 404364690 * 2010-1-1 */ ShareBusiness fMager=new FilesBusinessImpl(); private String fileName;// 初始的通过param指定的文件名属性 // 指定要被下载的文件路径,struts.xml中配置 private String inputPath; public String optionTs="Success!恭喜您,操作成功!"; public String getOptionTs() { return optionTs; } public void setOptionTs(String optionTs) { this.optionTs = optionTs; } public InputStream getInputStream() throws Exception { String url = inputPath + "/" + fileName; int size = url.length() - 1; // 把url字符串中原有的反斜杠替换成斜杠,若不替换则会因为斜杠和反斜杠并存而导致错误 for (int i = 0; i < size; i++) url = url.replace("\\", "/"); //如果文件不存在 //判断指向的路径是否存在,不存在则返回空 return ServletActionContext.getServletContext().getResourceAsStream(url); } public String execute() throws Exception { /* * 获取目标文件在服务器中保存的目录。若不在这个目录则拒绝下载,否则, * 稍微精通struts2的人可能试图获取WEB-INF下的文件,那就不安全了。 */ String downloadDir = ServletActionContext.getServletContext().getRealPath("/Upload/newsVideos"); //只提供下载视频的路径 // 获取目标文件的绝对路径 String downloadFile = ServletActionContext.getServletContext().getRealPath(inputPath); // System.out.println("---------------------->"+downloadFile+"/"+ fileName); /* * 防止企图下载不在目录downloadDir下的文件,以保障安全。若不在这个目 * 录则拒绝下载,否则,稍微精通struts2的人可能试图获取WEB-INF下 的文件,那就不安全了。 */ if (!downloadFile.startsWith(downloadDir)) { return null; // return "missFile"; } //如果文件不存在 返回文件丢失 提示 String filePP=downloadFile+"/"+ fileName; File f = new File(filePP); if (!f.exists()){ optionTs="sorry!文件已不存在。。"; return "missFile"; } //下载数量++ TFiles tempVo=new TFiles(); tempVo.setNewName(fileName); fMager.editVo(tempVo); return SUCCESS; } public String getFileName() { return fileName; } public void setFileName(String fileName) { this.fileName = fileName; } public String getInputPath() { return inputPath; } public void setInputPath(String inputPath) { this.inputPath = inputPath; } /** 提供转换编码后的供下载用的文件名 */ public String getDownloadFileName() { String downFileName = fileName; try { downFileName = new String(downFileName.getBytes(), "ISO8859-1"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return downFileName; } } //下面是配置文件 <!-- 文件下载,支持中文附件名 --> <action name="fileDownMager" class="com.cweb.lwpl.action.FileDAction"> <!--下载文件的目录,若不在这个目录下则拒绝下载以保障安全,这点在action类中实现 --> <param name="inputPath">/Upload/newsVideos/</param> <result name="success" type="stream"> <param name="contentType"> application/octet-stream;charset=ISO8859-1 </param> <param name="inputName">inputStream</param> <!-- 使用经过转码的文件名作为下载文件名,downloadFileName属性, 对应action类中的方法 getDownloadFileName() --> <!-- 动态获取文件名,这点很用实用价值!--> <param name="contentDisposition"> attachment;filename="${fileName}" </param> <param name="bufferSize">4096</param> </result> <result name="missFile"> /framework/files_error.jsp </result> </action>
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式