基于struts2框架文件的上传与下载
在开发一些社交网站时,需要有允许用户上传自己本地文件的功能,则需要文件的上传下载代码。
首先考虑的是文件的储存位置,这里不考虑存在数据库,因为通过数据库查询获取十分消耗资源与时间,故需将数据存储在服务器上。
1. 前台页面的代码:
<form action="photo-up" method="post" enctype="multipart/form-data">
上传图片: <input type="file" name="myFile">
<!--或者<s:file name="myFile" label="FILE"/> --> <input type="submit" value="上传"/><s:fielderror id="error"/>
</form>
<s:file name="myFile" label="FILE"/>
上面的重要属性是name,要求如后台的文件定义名一样。
2. 文件上传后台代码(struts2的Action控制类):
public class PhotoAction extends ActionSupport {
private static final long serialVersionUID = 6897968438458946989L;
private File myFile;
private String myFileContentType;
private String myFileFileName;
//定义以上三个变量,myFile是接受前台的文件,要求名字与name属性一样,其他的见名知意(就当固定格式)
User user = (User)ActionContext.getContext().getSession().get("user") ;
public String up() throws Exception {
//创建输入流
InputStream is = new FileInputStream(myFile) ;
//设置不同用户的文件保存目录
String photoPath = ServletActionContext.getServletContext()
.getRealPath("/user/photo/" + user.getUserName()) ;
File filePhotoPath = new File(photoPath);
if(!filePhotoPath.isDirectory()) {
filePhotoPath.mkdir();
}
//解决中文文件名问题,采用UUID获取随机字符串
String extension = FilenameUtils.getExtension(getMyFileFileName());//获取文件的拓展名
String filename = UUID.randomUUID().toString() + "."+ extension;
File toFile = new File(filePhotoPath, filename) ;
//输出流
OutputStream os = new FileOutputStream(toFile) ;
byte[] buf = new byte[1024] ;
int lenth ;
while((lenth = is.read(buf)) >0 ){
os.write(buf, 0, lenth);
}
is.close();
os.close();
return "up";
}
//属性的get、set方法
public File getMyFile() {
return myFile;
}
public void setMyFile(File myFile) {
this.myFile = myFile;
}
public String getMyFileFileName() {
return myFileFileName;
}
public void setMyFileFileName(String myFileFileName) {
this.myFileFileName = myFileFileName;
}
public String getMyFileContentType() {
return myFileContentType;
}
public void setMyFileContentType(String myFileContentType) {
this.myFileContentType = myFileContentType;
}
}
此代码将文件存储在 (Web应用程序的根目录的绝对路径)/user/photo/(userName) 下面。
在struts.xml文件中配置文件限制要求:
<action name="photo-*" class="photoAction" method="{1}">
<!-- 配置fileUpload拦截器 -->
<interceptor-ref name="fileUpload">
<!-- 配置允许上传文件类型 -->
<param name="allowedTypes">image/bmp,image/pjpeg,image/gif,image/png</param>
<!-- 配置允许上传文件大小最大值 -->
<param name="maximumSize">512000</param>
</interceptor-ref>
<result name="up" type="redirectAction">photo-showPhoto</result>
<result name="input" type="redirectAction">photo-showPhoto</result>
<result name="showPhoto">/showphoto.jsp</result>
</action>
3. 文件的下载代码
文件的下载代码比较简单,只需要得到web应用程序目录下文件的所在位置即可,然后放在一个超链接里面点击就可以浏览或下载。
public String showPhoto(){
String photoPath = ServletActionContext.getServletContext()
.getRealPath("/user/photo/" + user.getUserName()) ;
File file = new File(photoPath) ;
//获取该目录下所有的文件名
String[] photoList = file.list() ;
//将获取文件名的集合放在request里
ServletActionContext.getRequest().setAttribute("photoList", photoList);
return "showPhoto" ;
}
4. 返回页面,显示文件连接:
<table align="center" border="1" cellpadding="0" cellspacing="10">
<tr>
<s:iterator value="#request.photoList" var="photo" status="stu">
<td>
<a href='user/photo/${sessionScope.user.userName }/<s:property value="photo"/>'>
<img alt="" src='user/photo/${sessionScope.user.userName }/<s:property value="photo"/>'
width="100" height="120"></a>
</td>
<s:if test="(#stu.index + 1) % 6 == 0">
</tr>
<tr>
</s:if>
</s:iterator>
</tr>
</table>
以上有个在table里自动换行的小技巧,当(集合下标+1)能整除6就加</tr>结束一行,加<tr>开始新的一行。
基于struts2框架文件的上传与下载的更多相关文章
- Struts2控制文件的上传与下载
Struts2控制文件上传与下载的几个注意事项: (1)必须将表单的method设置为post,将enctype设置为multipart/from-data.只有这样,浏览器才会把用户选择文件的二进制 ...
- 使用Struts2实现文件的上传和下载
(一)单个文件的上传步骤: 1.拷贝jar包:commons-fileupload.jar, commons-io.jar 下载链接(文件上传.rar):http://www.cnblogs.com ...
- struts2实现文件的上传和下载实例[转]
实现原理 Struts 2是通过Commons FileUpload文件上传. Commons FileUpload通过将HTTP的数据保存到临时文件夹,然后Struts使用fileUpload拦截器 ...
- Struts2中文件的上传与下载
文件上传 1.jsp页面 <s:form action="fileAction" namespace="/file" method="POST& ...
- SpringMVC框架——文件的上传与下载
使用SpringMVC框架做个小练习,需求: 1.单个图片上传并显示到页面中: 2.多个图片上传并显示到页面中: 3.上传文件后下载文件: 1.pom.xml中添加依赖 <!-- 文件上传 -- ...
- JSP文件的上传和下载
文件上传下载,与传统的方式不同,这里能够上传和下载10G以上的文件.而且支持断点续传. 通常情况下,我们在网站上面下载的时候都是单个文件下载,但是在实际的业务场景中,我们经常会遇到客户需要批量下载的场 ...
- Struts2实现文件的上传与动态下载功能。
本篇主要使用Struts2实现文件的上传与动态下载功能.出于安全考虑,所以,在硬盘上存储上传的文件的时候,统一都重新命名为随机字符串.用数据库存储真实文件名与随机文件名称之间的关联. 下面的是实体类 ...
- 在SpringMVC框架下实现文件的 上传和 下载
在eclipse中的javaEE环境下:导入必要的架包 web.xml的配置文件: <?xml version="1.0" encoding="UTF-8" ...
- Gin-Go学习笔记四:Gin-Web框架 文件的上传下载
文件的上传和下载 1->文件的上传 文件的上传,采用的是uploadify.js这个插件. 本事例实现的是上传图片文件,其他的文件上传也一样. 2->文件的下载 文件的下载有两个实现的方式 ...
随机推荐
- 【Linux】more命令
用途 more主要用于一页一页查看档案 全称 全称即为more 说明 空格键 :代表向下翻一页,也可以使用CTRL+F Enter :代表下翻一行 :f :立刻显示出文件名以及目前显示的行数 ...
- RHEL 7 基础配置
一.修改运行级别 查看运行级别: [root@rhel7Oracle ~]# systemctl get-defaultgraphical.target [root@rhel7Oracle ~]# r ...
- 【LeetCode】111. Minimum Depth of Binary Tree (2 solutions)
Minimum Depth of Binary Tree Given a binary tree, find its minimum depth. The minimum depth is the n ...
- cat /proc/iomem
在proc目录下有iomem和ioports文件,其主要描述了系统的io内存和io端口资源分布. 对于外设的访问,最终都是通过读写设备上的寄存器实现的,寄存器不外乎:控制寄存器.状态寄存器和数据寄存器 ...
- Linux 间网线直连
核心提示:两台linux 系统用交叉线直连的方法: 1.交叉网线制作 A头:白橙,橙,白绿,蓝,白蓝,绿,白褐,褐 B头:白绿,绿,白橙,蓝,白蓝,橙,白褐,褐 即 B头的1.3脚相对A头互换:2脚与 ...
- python如何获取公众号下面粉丝的openid
如何获取公众号下面粉丝的openid呢,首先要获取一个access_token,这个token可不是令牌(Token),如何获取这个access_token呢?有两种方法,方法如下: # -*- co ...
- C#:向SqlServer数据库中插入imange类型
using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServi ...
- 你觉得你非常了解Javascript?
(翻译不当之处请谅解) 来源:http://www.ido321.com/914.html 这里有5个小脚本,有助于你真正理解JavaScript核心–闭包和作用域.没有在控制台执行之前,尝试回答每一 ...
- ASIHTTPRequest 简单使用
ASIHTTPResquest 框架功能强大,应用非常多. 曾经写过ASIHTTPResquest的导入,如今就看一下基本使用 记一下当中基础的操作: 1.发送同步请求: NSURL * url = ...
- 随机用户id号,随机密码用户名
类似新浪微博的用户Id怎么生成呢? 特点:10位随机数,而且是以1开头的 好处:不容易猜出有多少用户 方法一: 目的是生成唯一id.可以用uniqid.uniqid获取一个字符串,循环这个字符串,把每 ...