Struts2项目实战 微云盘(七):文件上传下载
来源:互联网 发布:淘宝站外活动有哪些 编辑:程序博客网 时间:2024/04/24 05:38
一、本节说明
进入github下载本项目(开源)
本节主要实现文件上传与下载功能。
二、文件上传
1.控制器实现
文件上传的基本知识可以查看我的另一篇博文struts2实现文件上传(一)
这里的UploadAction在整体上与那一篇中的实现方法是一致的,不过还要在那个基础上添加一些东西。
那篇博文的UploadAction只做了一件事情:
- 用户上传文件后UploadAction将其保存在uploadFiles文件夹下
在该项目中用户上传文件后需要做三件事情:
- 用户上传文件后UploadAction将其保存在uploadFiles文件夹下,与上面那个控制器一致
- 在该用户的指定路径下添加该文件结点
- 返回该用户指定路径下的所有孩子集合
为什么上传文件还要求有返回值?
因为我用AJAX提交请求,提交成功我想获取到该路径下的孩子结点然后显示出来,这样就可以实现上传文件即时显示。
因为代码是重复的,所以这里只说有区别的地方
//添加一个属性,保存返回的结果private List<DirNode> dirNodes=new ArrayList<DirNode>();//省略setter、getter方法
@Override public String execute() throws Exception { //获取待保存文件的位置的输出流 //获取上传文件的输入流 //不断将输入流中的数据写入输出流 // 获取用户账号和密码 //将文件与用户关联起来 ServiceImpl serviceImpl=new ServiceImpl(); DirNode dirNode=serviceImpl.findNode(username, password,dirPath); dirNode.getChilds().add(new DirNode(uploadFileName, false,savePath+"/"+uploadFileName)); //设置返回结果 setDirNodes(dirNode.getChilds()); //返回 成功标志 return SUCCESS; }}
2.Action配置
UploadAction返回值仍然为JSON,所以还应该在lzf2包下配置该Action
<!-- 文件上传 --><action name="uploadAction" class="cn.lzf.action.UploadAction"> <param name="savePath">uploadFiles</param> <result name="error">/WEB-INF/content/login.jsp</result> <result type="json"> <param name="noCache">true</param> <param name="contentType">text/html</param> </result></action>
3.js请求文件上传
关于文件上传UI的优化以及AJAX发起请求在上一节已经介绍过了,这里不再细说。
三、文件下载
1.控制器实现
以下是控制器的实现代码,虽然代码很长,但是看过之后你会发现有用的也就几行:
//注意这个文件名是getTargetFile()//所以在stream结果中应该配置//<param name="inputName">targetFile</param>public InputStream getTargetFile() throws Exception { return ServletActionContext.getServletContext().getResourceAsStream(inputPath); } @Override public String execute() throws Exception { //对用户身份验证 ActionContext ctx = ActionContext.getContext(); String username = (String) ctx.getSession().get("username"); if (username != null) return SUCCESS; return LOGIN; }
以下是控制器的完整代码:
package cn.lzf.action;import java.io.InputStream;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionSupport;/** * 文件下载控制器 * * @author Administrator 刘壮飞 * */public class DownloadAction extends ActionSupport { //文件路径 private String inputPath; //下载之后的文件名 private String fileName; public String getFileName() { return fileName; } public void setFileName(String fileName) { this.fileName = fileName; } public void setInputPath(String inputPath) { this.inputPath = inputPath; } public String getInputPath() { return inputPath; } public InputStream getTargetFile() throws Exception { return ServletActionContext.getServletContext().getResourceAsStream(inputPath); } @Override public String execute() throws Exception { //对用户身份验证 ActionContext ctx = ActionContext.getContext(); String username = (String) ctx.getSession().get("username"); if (username != null) return SUCCESS; return LOGIN; }}
2.控制器配置
DownloadAction返回值不是JSON,所以在lzf包下对其进行配置。
<!-- 文件下载 --><action name="downloadAction" class="cn.lzf.action.DownloadAction"> <result type="stream"> <param name="inputName">targetFile</param> <param name="contentType">text/plain</param> <param name="contentDisposition">attachment;fileName="${fileName}"</param> <param name="bufferSize">4096</param> </result> <result name="login">/WEB-INF/content/login.jsp</result></action>
3.js请求文件下载
在parseData(data)方法中可以发现有如下代码片段:
//如果该节点是文件,那么给它设置下载链接if(url!=null) html+="<a href=\"downloadAction?inputPath="+url+"&fileName="+name+"\">" + name + "</a></div>";
用户点击该链接后会弹出下载框。
四、小结
整个项目已经接近尾声了,下一节主要介绍异常还有项目中出现的问题
阅读全文
0 0
- Struts2项目实战 微云盘(七):文件上传下载
- struts2的开发(文件上传下载)
- Struts2文件上传下载
- Struts2 多文件上传下载
- struts2文件上传下载
- struts2文件上传下载详解
- struts2 文件上传下载
- Struts2文件上传下载(一)
- Struts2文件上传下载(二)
- Struts2 上传下载文件
- struts2上传下载文件
- Struts2文件上传下载
- struts2文件上传下载
- struts2文件上传下载
- struts2的文件上传下载
- struts2实现文件上传下载
- 文件上传下载struts2
- Struts2文件上传下载
- js的Array对象 Date对象 Math对象
- HDU
- leetcode--Length of Last Word
- Windows字符串类型(解惑贴)
- UVA
- Struts2项目实战 微云盘(七):文件上传下载
- docker 使用注意要点
- 2017日照夏令营 day3 t2 小z搭积木
- 机器学习(2)
- github常见操作和常见错误!错误提示:fatal: remote origin already exists.
- How to install/config/start-up MongoDB in MAC
- 感觉有用的 网传挺火的一篇忠告励志文
- StringBuffer的用法
- UI09-UIView视图添加圆角效果