在开发一些社交网站时,需要有允许用户上传自己本地文件的功能,则需要文件的上传下载代码。

首先考虑的是文件的储存位置,这里不考虑存在数据库,因为通过数据库查询获取十分消耗资源与时间,故需将数据存储在服务器上。

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框架文件的上传与下载的更多相关文章

  1. Struts2控制文件的上传与下载

    Struts2控制文件上传与下载的几个注意事项: (1)必须将表单的method设置为post,将enctype设置为multipart/from-data.只有这样,浏览器才会把用户选择文件的二进制 ...

  2. 使用Struts2实现文件的上传和下载

    (一)单个文件的上传步骤: 1.拷贝jar包:commons-fileupload.jar,  commons-io.jar 下载链接(文件上传.rar):http://www.cnblogs.com ...

  3. struts2实现文件的上传和下载实例[转]

    实现原理 Struts 2是通过Commons FileUpload文件上传. Commons FileUpload通过将HTTP的数据保存到临时文件夹,然后Struts使用fileUpload拦截器 ...

  4. Struts2中文件的上传与下载

    文件上传 1.jsp页面 <s:form action="fileAction" namespace="/file" method="POST& ...

  5. SpringMVC框架——文件的上传与下载

    使用SpringMVC框架做个小练习,需求: 1.单个图片上传并显示到页面中: 2.多个图片上传并显示到页面中: 3.上传文件后下载文件: 1.pom.xml中添加依赖 <!-- 文件上传 -- ...

  6. JSP文件的上传和下载

    文件上传下载,与传统的方式不同,这里能够上传和下载10G以上的文件.而且支持断点续传. 通常情况下,我们在网站上面下载的时候都是单个文件下载,但是在实际的业务场景中,我们经常会遇到客户需要批量下载的场 ...

  7. Struts2实现文件的上传与动态下载功能。

    本篇主要使用Struts2实现文件的上传与动态下载功能.出于安全考虑,所以,在硬盘上存储上传的文件的时候,统一都重新命名为随机字符串.用数据库存储真实文件名与随机文件名称之间的关联. 下面的是实体类 ...

  8. 在SpringMVC框架下实现文件的 上传和 下载

    在eclipse中的javaEE环境下:导入必要的架包 web.xml的配置文件: <?xml version="1.0" encoding="UTF-8" ...

  9. Gin-Go学习笔记四:Gin-Web框架 文件的上传下载

    文件的上传和下载 1->文件的上传 文件的上传,采用的是uploadify.js这个插件. 本事例实现的是上传图片文件,其他的文件上传也一样. 2->文件的下载 文件的下载有两个实现的方式 ...

随机推荐

  1. 【Linux】more命令

    用途 more主要用于一页一页查看档案 全称 全称即为more 说明 空格键 :代表向下翻一页,也可以使用CTRL+F Enter :代表下翻一行 :f      :立刻显示出文件名以及目前显示的行数 ...

  2. RHEL 7 基础配置

    一.修改运行级别 查看运行级别: [root@rhel7Oracle ~]# systemctl get-defaultgraphical.target [root@rhel7Oracle ~]# r ...

  3. 【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 ...

  4. cat /proc/iomem

    在proc目录下有iomem和ioports文件,其主要描述了系统的io内存和io端口资源分布. 对于外设的访问,最终都是通过读写设备上的寄存器实现的,寄存器不外乎:控制寄存器.状态寄存器和数据寄存器 ...

  5. Linux 间网线直连

    核心提示:两台linux 系统用交叉线直连的方法: 1.交叉网线制作 A头:白橙,橙,白绿,蓝,白蓝,绿,白褐,褐 B头:白绿,绿,白橙,蓝,白蓝,橙,白褐,褐 即 B头的1.3脚相对A头互换:2脚与 ...

  6. python如何获取公众号下面粉丝的openid

    如何获取公众号下面粉丝的openid呢,首先要获取一个access_token,这个token可不是令牌(Token),如何获取这个access_token呢?有两种方法,方法如下: # -*- co ...

  7. C#:向SqlServer数据库中插入imange类型

    using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServi ...

  8. 你觉得你非常了解Javascript?

    (翻译不当之处请谅解) 来源:http://www.ido321.com/914.html 这里有5个小脚本,有助于你真正理解JavaScript核心–闭包和作用域.没有在控制台执行之前,尝试回答每一 ...

  9. ASIHTTPRequest 简单使用

    ASIHTTPResquest 框架功能强大,应用非常多. 曾经写过ASIHTTPResquest的导入,如今就看一下基本使用 记一下当中基础的操作: 1.发送同步请求: NSURL * url = ...

  10. 随机用户id号,随机密码用户名

    类似新浪微博的用户Id怎么生成呢? 特点:10位随机数,而且是以1开头的 好处:不容易猜出有多少用户 方法一: 目的是生成唯一id.可以用uniqid.uniqid获取一个字符串,循环这个字符串,把每 ...