关闭

SSH框架下使用Commons FileUpload控件完成多文件上传与下载

1490人阅读 评论(2) 收藏 举报
分类:

某些系统中,经常需要用到上传与下载功能,其中,如果指定了不同角色上传多不同文件,并且指定给其他角色进行下载。那么一般最好的方法就是将文件按照不同路径上传到不同的文件夹中,然后再在数据库中存入文件路径。

比如在教务系统中,学生要求上传自己的作业,然后给教师进行下载。其中不同的学生上传不同的作业文件,然后老师按照需要下载某个学生的作业文件。如上,如果直接将文件上传到某个文件夹之后,就必须在action或者jsp链接中指定老师需要下载的某个学生作业文件,这样就显得麻烦而且很难实现。

有两种思路,一种是将文件转换为二进制,然后存入到数据库中,这种方法有个问题,就是如果上传的文件较大超过了限制的大小,那么就无法上传到数据库。

第二种是在项目下或者服务器中新建一个文件夹,将学生上传的文件上传到这个文件夹中,然后在action中获取该文件的路径以及文件名称,然后将文件路径和文件名称一起存到数据库中,因为存入的只是一个String字符串,所以文件大小将没有被很大程度的限制。

在下载业务中,只要select出相应学生的字段,然后在jsp页面写一个<a>链接就可以指定到某个学生的作业进行下载了。


下面给出相应代码。

上传Action
package com.edu.action;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import org.apache.struts2.ServletActionContext;
import com.edu.po.Student;
import com.edu.service.StudentService;
import com.opensymphony.xwork2.ActionSupport;
public class StudentUploadFilesAction extends ActionSupport{
 //设置数据库保存路径
 private String s_path;
 //设置学生字段编号
 private String s_no;
 //设置文件名
 private String title;
 //设置文件
 private File upload;
 //设置上传文件类型
 //private String uploadContentType;
 //设置上网文件名称
    private String uploadFileName;

    //接受依赖注入的属性
    private String savePath;

    //业务逻辑组件
    private StudentService studentService;

    //设置业务逻辑组件的方法
    public void setStudentService(StudentService studentService) {
  this.studentService = studentService;
 }
 //接受依赖注入的方法
    public void setSavePath(String value) {
        this.savePath = value;
    }
    private String getSavePath() throws Exception {
        return ServletActionContext.getRequest().getRealPath(savePath);
    }
 public String getTitle() {
  return title;
 }
 public void setTitle(String title) {
  this.title = title;
 }

 public File getUpload() {
  return upload;
 }
 public void setUpload(File upload) {
  this.upload = upload;
 }
// public String getUploadContentType() {
//  return uploadContentType;
// }
// public void setUploadContentType(String uploadContentType) {
//  this.uploadContentType = uploadContentType;
// }
 public String getUploadFileName() {
  return uploadFileName;
 }
 public void setUploadFileName(String uploadFileName) {
  this.uploadFileName = uploadFileName;
 }


 public String getS_path() {
  return s_path;
 }
 public void setS_path(String sPath) {
  s_path = sPath;
 }
 public String getS_no() {
  return s_no;
 }
 public void setS_no(String s_no) {
  this.s_no = s_no;
 }
 public String execute() throws Exception {
  Student s=studentService.queryStudentScheduledByID(s_no);
  s.setS_path("StudentUpload/"+getUploadFileName());
  studentService.updateStudentScheduled(s);

        // 以服务器的文件保存地址和原文件名建立上传文件输出流
        FileOutputStream fos = new FileOutputStream(getSavePath() + "//"+ getUploadFileName());
        FileInputStream fis = new FileInputStream(getUpload());
        byte[] buffer = new byte[1024];
        int len = 0;
        while ((len = fis.read(buffer)) > 0) {
            fos.write(buffer, 0, len);
        }

        //关闭输入输出流
        fis.close();

        fos.close();

        return SUCCESS;
    }
}

上传jsp

<body>



  <s:iterator value="#request.name" id="student">

   你好,<s:property value="#student.s_name"/>

   <hr>

    <center>

     <h1>学生上传文件</h1>

      <form action="studentuploadfiles.action?s_no=<s:property value="#student.s_no"/>" method="post" enctype="multipart/form-data"> 

      文件标题:<input type="text" name="title"><br />

      选择文件:<input type="file" name="upload"><br />

      <input type="submit" value="上传">

    </form>

    </center>

     <hr>

   </s:iterator>

  </body>

在spring配置文档配置好以来注入,然后在sturts配置文档配置相应Action,这里使用拦截器规定了文件大小以及上传路径

  <!-- studentuploadfiles.action 学生上传文件 -->

         <action name="studentuploadfiles" class="studentUploadFilesAction">

            <interceptor-ref name="fileUpload"> 



                <param name="maximumSize">1024*1024</param> 

            </interceptor-ref> 

            <interceptor-ref name="defaultStack"/>   

            <!-- 保存路径savePath依赖注入 -->         

            <param name="savePath">/StudentUpload</param>

            <result name="input"> /StudentUploadFiles.jsp</result> 

            <result name="success">/StudentUploadFilesSuccess.jsp</result>  

        </action>

下载jsp

下载jsp比较简单,使用链接下载文件的方法,在action中获取了学生信息,然后传递给List对象,再iterator出来,这样子就可以下载指定的学生文件了。

  <body>

    <center>

     <h2>学生作业列表</h2>

     <table border="1">

      <tr>

       <td>学生姓名</td>

       <td>学生所属学院</td>

       <td>学生所属系别</td>

       <td>学生作业</td>

      </tr>

      <s:iterator value="#request.dow" id="file">

       <tr>

        <td><s:property value="#file.s_name"/></td>

        <td><s:property value="#file.s_college"/></td>

        <td><s:property value="#file.s_department"/></td>

        <td><a href="<s:property value="#file.s_path"/>">下载学生作业</a></td>

       </tr>

      </s:iterator>

     </table>

    </center>

  </body>
0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

ssh框架集成,formFile批量上传完整版

  • 2010-03-16 16:33
  • 4KB
  • 下载

ssh2多文件的上传与下载

  • 2013-09-30 09:32
  • 25.83MB
  • 下载

ssh文件下载与上传细节

* 文件上传 * @return */ private File schedule; private String scheduleFileName; ...
  • Fly_Eason
  • Fly_Eason
  • 2017-06-29 20:31
  • 387

SSH框架中实现文件的上传功能

1.上传页面代码 upload.jsp 请选择需要上传的文件: 2.通过struts的控制跳转的action代码,将选择的文件通过流上传到项目目录下的...
  • clare504
  • clare504
  • 2013-09-22 11:37
  • 41313

Spring整合Struts2实现多文件上传及下载

Sping与Struts环境的搭建在前文已经讲述过了,再次就不再做过多介绍了,详情请参考前文《Spring整合Struts2中拦截链与注解的使用 》。接下来进入正题,Struts2的多文件上传步骤。...
  • a1314517love
  • a1314517love
  • 2013-11-30 20:20
  • 7198

【SSH三大框架】Struts2基础第五篇:文件上传

Struts2的文件上传
  • u010800530
  • u010800530
  • 2014-11-12 21:32
  • 2720

SSH深度历险(九) Struts2+DWZ+Uploadify实现多文件(文件和图片等等)上传

在gxpt_uas系统中,要实现文件的批量上传至mongodb,在学习这个过程中,学习了mongodb,并实现了批量上传的功能,实现思路:在DWZ的基础上参考官方的实例结合现有的GXPT来实现,期间看...
  • lishehe
  • lishehe
  • 2014-07-02 08:14
  • 7842

ssh框架实现多文件上传

  • 2017-11-20 00:18
  • 2.79MB
  • 下载

【SSH2(实践篇)】--Struts2文件上传下载实例

struts的文件上传和下载使用的是io流操作完成的,可以使用java.io流,同样可以使用第三方的common.io流实现。Struts2并没有提供文件上传的组件,所以想要实现上传的功能就必须通过第...
  • zhang_xinxiu
  • zhang_xinxiu
  • 2014-05-07 07:10
  • 20324

ssh批量上传文件

上传文件大多数用的是ftp,但是用ftp有一点不好,就是本地和远程的目录要对应,这样就要在多个目录下去切换,这样挺麻烦的,如果不注意的话,很有可能传错。所以想了个办法利用scp来批量上传文件或者目录。...
  • jiedushi
  • jiedushi
  • 2011-11-28 11:00
  • 2174
    个人资料
    • 访问:83134次
    • 积分:1987
    • 等级:
    • 排名:千里之外
    • 原创:116篇
    • 转载:17篇
    • 译文:0篇
    • 评论:15条
    博客专栏
    最新评论