一个简单的struts2上传图片的例子

说到上传图片,最近在赶一个项目,也遇到了要上传头像的难题,在网上搜了好久,都没有找到满意的答案。于是又选择了最原始的上传图片的方法,在此做个记录,谨作备忘之用。

首先是添加页面add_UI.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <%@include file="/common/header.jsp"%>
    <title>用户管理</title>
    <script type="text/javascript" src="${basePath }js/datepicker/WdatePicker.js"></script>
</head>
<body class="rightBody">
<form id="form" name="form" action="${basePat }user/user_add.action" method="post" enctype="multipart/form-data">
    <div class="p_d_1">
        <div class="p_d_1_1">
            <div class="content_info">
    <div class="c_crumbs"><div><b></b><strong>用户管理</strong>&nbsp;-&nbsp;新增用户</div></div>
    <div class="tableH2">新增用户</div>
    <table id="baseInfo" width="100%" align="center" class="list" border="0" cellpadding="0" cellspacing="0"  >
        <tr>
            <td class="tdBg" width="200px">所属部门:</td>
            <td><s:select name="user.dept" list="#{‘部门A‘:‘部门A‘,‘部门B‘:‘部门B‘ }"/></td>
        </tr>
        <tr>
            <td class="tdBg" width="200px">头像:</td>
            <td>
                <input type="file" name="headImg"/>
            </td>
        </tr>
        <tr>
            <td class="tdBg" width="200px">用户名:</td>
            <td><s:textfield name="user.name"/> </td>
        </tr>
        <tr>
            <td class="tdBg" width="200px">帐号:</td>
            <td><s:textfield name="user.account"/></td>
        </tr>
        <tr>
            <td class="tdBg" width="200px">密码:</td>
            <td><s:textfield name="user.password"/></td>
        </tr>
    </table>
    <div class="tc mt20">
        <input type="submit" class="btnB2" value="保存" />
        &nbsp;&nbsp;&nbsp;&nbsp;
        <input type="button"  onclick="javascript:history.go(-1)" class="btnB2" value="返回" />
    </div>
    </div></div></div>
</form>
</body>
</html>

然后是UserAction.java

import java.io.File;
import java.util.List;
import java.util.UUID;

import javax.annotation.Resource;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends BaseAction {

    @Resource
    private UserService userService;

    private User user;

    private File headImg;
    private String headImgContentType;
    private String headImgFileName;
        //保存新增
    public String add(){
        try {
            if(user != null){
                //处理头像
                if(headImg != null){
                    //1、保存头像,保存头像文件到服务器中
                    String filePath = ServletActionContext.getServletContext().getRealPath("/upload/user");
                    String fileName = UUID.randomUUID().toString().replaceAll("-", "") + headImgFileName.substring(headImgFileName.lastIndexOf("."));
                    FileUtils.copyFile(headImg, new File(filePath, fileName));

                    //2、设置到用户头像
                    user.setHeadImg("user/"+fileName);
                }
                //保存用户及其角色
                userService.saveUser(user);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "list";
    }
public User getUser() {
        return user;
    }
    public void setUser(User user) {
        this.user = user;
    }
    public File getHeadImg() {
        return headImg;
    }
    public void setHeadImg(File headImg) {
        this.headImg = headImg;
    }
    public String getHeadImgContentType() {
        return headImgContentType;
    }
    public void setHeadImgContentType(String headImgContentType) {
        this.headImgContentType = headImgContentType;
    }
    public String getHeadImgFileName() {
        return headImgFileName;
    }
    public void setHeadImgFileName(String headImgFileName) {
        this.headImgFileName = headImgFileName;
    }
}
注意:headImg,headImgContentType,headImgFileName这三个变量的名称不要改,因为改了可能不成功。
至于具体的saveUser(user)方法就是保存用户的方法啦,这里就不赘述了。而其他ssh的配置文件和其他java待有空的时候再总结个demo出来吧。
时间: 2024-10-28 15:35:05

一个简单的struts2上传图片的例子的相关文章

jfinal初接触,一个简单的文件上传例子

写了个上传的小例子. 从jfinal官网下载jfinal-1.8_demo_for_jsp.zip 然后下载jfinal-1.8-lib.zip 按要求删掉该删除的,引入一些包,之后的项目结构: DemoConfig.java中配置路由,只留下了根路径: /** * 配置路由 */ public void configRoute(Routes me) { me.add("/", CommonController.class); //me.add("/blog", B

一个简单的 ASP.NET MVC 例子演示如何在 Knockout JS 的配合下,使用 TypeScript 。

前言 TypeScript 是一种由微软开发的自由和开源的编程语言.它是JavaScript的一个超集,而且本质上向这个语言添加了可选的静态类型和基于类的面向对象编程.安德斯·海尔斯伯格,C#的首席架构师,已工作于TypeScript的开发.TypeScript扩展了 JavaScript 的句法,所以任何现有的JavaScript程序可以不加改变的在TypeScript下工作.TypeScript是为大型应用之开发而设计,而编译时它产生 JavaScript 以确保兼容性.TypeScript

CSS布局中一个简单的应用BFC的例子

什么是BFC BFC(Block Formatting Context),简单讲,它是提供了一个独立布局的环境,每个BFC都遵守同一套布局规则.例如,在同一个BFC内,盒子会一个挨着一个的排,相邻盒子的间距是由margin决定且垂直方向的margin会重叠.而float和clear float也只对同一个BFC内的元素有效. 什么情况产生BFC W3C标准中这样描述:Floats, absolutely positioned elements, block containers (such as

一个简单的函数指针测试例子

一般函数指针的一个简单测试.将函数放到vector里面,将函数作为形参. 1 typedef void(*GTestFunPtr)(int, int); 2 3 void test1(int a, int b) 4 { 5 std::cout << "test1:" << a + b << std::endl; 6 } 7 8 void test2(int a, int b) 9 { 10 std::cout << "test2

一个简单的Spring MVC的例子

一.Spring MVC的优点 1.Spring3 MVC的学习难度小于Struts2,Struts2用不上的多余功能太多.呵呵,当然这不是决定因素. 2.Spring3 MVC很容易就可以写出性能优秀的程序,Struts2要处处小心才可以写出性能优秀的程序(指MVC部分) 3.Spring3 MVC的灵活是你无法想像的,Spring的扩展性有口皆碑,Spring3 MVC当然也不会落后,不会因使用了MVC框架而感到有任何的限制. 二.简单的例子 1.配置web.xml 指除了Control层外

7.qfilesystemmodel rowcount 为什么为0? 一个简单的model类的例子

任务: 1.新建一个空的mainwindow项目 2.debug下编译得到一个文件夹,应用程序输出这个文件夹中的文件(不显示文件夹中的文件夹) 3.使用QFileSystemModel完成. 本例显示结果: Makefile Makefile.Debug Makefile.Release ui_mainwindow (debug和release是文件夹,不在应用程序输出中) mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #inclu

写一个简单的struts2

导包:struts2-core-2.5.1 写action类, package web; public class HelloWorldAction { private String name; public String execute(){ return "success"; } public String getName() { return name; } public void setName(String name) { this.name = name; } index.

一个简单的jQuery回调函数例子

jQuery回调函数简单使用 比如说,我们想要点击某个按钮后触发事件, 先把一些指定内容给隐藏掉, 然后跳出相关信息的对话框. 如果使用普通的方法, 不用回调函数的话, 会有怎么样的效果呢? 效果是先弹出对话框再隐藏内容, 然后再隐藏指定内容. 这显然不是我们想要的效果, 如果使用回调函数,就可以解决这个问题. 当然,回调函数功能远不只这么简单…… 具体的代码如下: [html] view plain copy <%@ page language="java" import=&q

shiro的基本认识及做一个简单的授权登陆的例子

先推荐一个网站,无意中发现的.感觉蛮好的. 推荐一套完整的Shiro Demo,免费的.Shiro Demo:http://www.sojson.com/shiroDemo已经部署到线上,地址是http://shiro.itboy.net管理员帐号:admin,密码:sojson.com 如果密码错误,请用sojson.PS:你可以注册自己的帐号,然后用管理员赋权限给你自己的帐号,但是,每20分钟会把数据初始化一次.建议自己下载源码,让Demo跑起来,然后跑的更快. 原文地址:https://w