Struts学习之 实现文件上传、下载操作

一、Struts-cofig.xml流程图

二、register.jsp页面文件

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
  <head>
    <title>My JSP 'register.jsp' starting page</title>
  </head>
  <body>
      <div align="center">
    <h1>注册用户</h1>
    <!-- 如果我們的表單有文件控件,則需要重新指定表單編碼方式 -->
    <form enctype="multipart/form-data" action="register.do" method="post">
        Name:<input type="text" name="name"/><br/>
        Photo:<input type="file" name="photo"/><br/>
    <input type="submit" value="注冊用戶"/>
    </form>
    </div>
  </body>
</html>
注册页面

三、RegisterAction文件

/*
 * Generated by MyEclipse Struts
 * Template path: templates/java/JavaClass.vtl
 */
package com.zkj.struts.action;

import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.UUID;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.upload.FormFile;

import com.zkj.entity.Users;
import com.zkj.service.UsersService;
import com.zkj.struts.form.UserForm;
import com.zkj.utils.UpdownUtils;

/**
 * MyEclipse Struts Creation date: 04-25-2015
 * 
 * XDoclet definition:
 * 
 * @struts.action path="/register" name="userForm" scope="request"
 */
public class RegisterAction extends Action {
    /*
     * Generated Methods
     */

    /**
     * Method execute
     * 
     * @param mapping
     * @param form
     * @param request
     * @param response
     * @return ActionForward
     */
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) {
        UserForm userForm = (UserForm) form;// TODO Auto-generated method stub

        // 取出表單數據
        String name = userForm.getName();
        FormFile ff = userForm.getPhoto();
        // 通過formfile我們可以獲取關於用戶上傳文件的各種信息
        String sFileName = ff.getFileName();
        String sFileNameNew = UpdownUtils.getUuidFileName(sFileName);

        int fsize = ff.getFileSize();

        InputStream is = null;
        OutputStream os = null;
        try {
            // 取得輸入流
            is = ff.getInputStream();

            // 得到输出流并保存到tomcat服务器的绝对路径
            String sPath = request.getSession().getServletContext()
                    .getRealPath("/file");
            os = new FileOutputStream(sPath + "\" + sFileNameNew);

            int len = 0;
            byte[] buff = new byte[1024];
            // 循环处理
            while ((len = is.read(buff)) > 0) {
                // 读入一段,写入一段
                os.write(buff, 0, len);
            }

            UsersService service = new UsersService();

            try {
                Users user = new Users();
                user.setUsername(name);
                user.setPhoto(sFileName);
                user.setPhotouuid(sFileNameNew);
                service.saveUser(user);
            } finally {
                service = null;
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (is != null)
                try {
                    is.close();
                } catch (Exception e) {

                }
            if (os != null)
                try {
                    os.close();
                } catch (Exception e) {

                }
        }

        return mapping.findForward("ok");
    }
}
上传Action

四、list.jsp页面文件

 1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
 2 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 4 <html>
 5   <head>
 6    
 7     <title>My JSP 'list.jsp' starting page</title>
 8   </head>
 9   
10   <body>
11     <div align="center">
12     <h1>用户列表</h1>
13     <table>
14     <tr>
15     <td>主键</td><td>姓名</td><td>照片</td><td>操作</td>
16     </tr>
17     <c:forEach var="user" items="${arr}">
18     <tr>
19     <td>${user.userid }</td><td>${user.username }</td>
20     <td><img src="file/${user.photouuid}" width="50px"/></td>
21     <td><a href="downloadFile.do?id=${user.userid}">下载图片文件</a></td>
22     </tr>
23     </c:forEach>
24     </table>
25     </div>
26   </body>
27 </html>
用户列表(带图片)

五、ListAction.java文件

public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) {
        // TODO Auto-generated method stub
        UsersService us = new UsersService();
        try {
            response.setCharacterEncoding("utf-8");
            request.setAttribute("arr", us.getAllUsers());
            return mapping.findForward("list");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            us = null;
        }

        return null;
    }
View Code

六、DownloadFileAction.java

/*
 * Generated by MyEclipse Struts
 * Template path: templates/java/JavaClass.vtl
 */
package com.zkj.struts.action;

import java.io.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import com.zkj.entity.Users;
import com.zkj.service.UsersService;

/**
 * MyEclipse Struts Creation date: 04-26-2015
 * 
 * XDoclet definition:
 * 
 * @struts.action
 */
public class DownloadFileAction extends Action {
    /*
     * Generated Methods
     */

    /**
     * Method execute
     * 
     * @param mapping
     * @param form
     * @param request
     * @param response
     * @return ActionForward
     */
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) {
        // TODO Auto-generated method stub
        // 下句,控制可以显示中文
        response.setContentType("text/html;charset=utf-8");

        int nId = Integer.parseInt(request.getParameter("id"));

        InputStream is = null;
        OutputStream os = null;
        UsersService us = new UsersService();
        try {
            Users user = us.getUserById(nId);

            // 得到输出流并保存到tomcat服务器的绝对路径
            String sPath = request.getSession().getServletContext()
                    .getRealPath("/file");

            String sFileName = sPath + "\" + user.getPhotouuid();
            String sTrueName = user.getPhoto();
            //如果源文件名中文,需要进行url编码
            sTrueName = java.net.URLEncoder.encode(sTrueName, "utf-8");
            //告诉浏览器,有一个文件需要下载
            response.setHeader("Content-Disposition", "attachment; filename="
                    + sTrueName);
            // 取得輸入流
            is = new FileInputStream(sFileName);

            os = response.getOutputStream();

            int len = 0;
            byte[] buff = new byte[1024];
            // 循环处理
            while ((len = is.read(buff)) > 0) {
                // 读入一段,写入一段
                os.write(buff, 0, len);
            }

            return mapping.findForward("lst");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (is != null)
                try {
                    is.close();
                } catch (Exception e) {

                }
            if (os != null)
                try {
                    os.close();
                } catch (Exception e) {

                }
            us = null;
        }

        return null;
    }
}
View Code

七、关键的UsersService业务处理类基于hibernate实现代码

package com.zkj.service;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.hibernate.*;

import com.zkj.entity.Users;
import com.zkj.sessionfactory.HibernateSessionFactory;

public class UsersService {

    public static SessionFactory sf;

    static {
        try {
            // 创建sessionfactory实例
            sf = HibernateSessionFactory.getSessionFactory();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public boolean saveUser(Users user) {
        boolean result = false;

        Session session = sf.openSession();
        Transaction trans = null;
        try {
            trans = session.beginTransaction();
            session.save(user);
            trans.commit();
        } catch (Exception e) {
            if (trans != null) {
                trans.rollback();
            }
            e.printStackTrace();
        } finally {
            session.close();
        }

        return result;
    }

    public ArrayList<Users> getAllUsers() {

        ArrayList<Users> result = new ArrayList<Users>();

        Session session = sf.openSession();
        try {
            List list = session.createQuery("from com.zkj.entity.Users u")
                    .list();

            Iterator it = list.iterator();
            while (it.hasNext()) {
                Users user = (Users) it.next();
                result.add(user);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            session.close();
        }

        return result;
    }

    public Users getUserById(int aId) {

        Users result = null;

        Session session = sf.openSession();
        try {
            List lst = session.createQuery(
                    "from com.zkj.entity.Users u where u.userid=" + aId).list();

            Iterator it = lst.iterator();
            if (it.hasNext()) {
                result = (Users) it.next();
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            session.close();
        }

        return result;
    }
}
View Code
原文地址:https://www.cnblogs.com/jiqiwoniu/p/4458380.html