文档章节

使用Struts2上传图片

小和尚敲代码
 小和尚敲代码
发布于 2016/02/03 18:00
字数 556
阅读 89
收藏 4
点赞 1
评论 0

在Struts2中为我们提供了比较简单的文件上传方式.

首先引入commons-fileupload-x.jar、commons-io-x.jar 这两个jar包,然后引入Struts2相关jar包

 

接下来新建一个jsp文件:写一个文件上传表单,这里需要特别注意要在form加上enctype="multipart/form-data"  method="post" .

<s:form id="upload-form-1" name="upload-form-1"
        action="/user/bookAction!uploadbook" method="post"
        enctype="multipart/form-data">
        书籍名称:<input type="text" name="uploadbookform.book_name"/><br>
                书籍封页图:<input type="file" name="uploadbookform.book_pic"/><br>
        作者:<input type="text" name="uploadbookform.book_author"/><br>
        译者:<input type="text" name="uploadbookform.book_translator"/><br>
        内容简介:<input type="text" name="uploadbookform.publish_info"/><br>
        书籍分类:<input type="text" name="uploadbookform.book_labels"/><br>
        <input type="submit" >
    </s:form>

然后是写Action类:

public class BookAction extends ActionSupport implements RequestAware {
    private Map<String, Object> request;
    private Map<String, Object> session = ActionContext.getContext()
            .getSession();
    
    @Override
    public void setRequest(Map<String, Object> request) {
        // TODO Auto-generated method stub
        this.request = request; // 将该方法中的request赋值给成员变量request
    }

    @Resource(name = "bookManage")
    private BookServiceImpl bookservice;

    private List<Book> booklist;
    private UploadBookForm uploadbookform;
    private static final long serialVersionUID = 1L;

    public UploadBookForm getUploadbookform() {
        return uploadbookform;
    }

    public void setUploadbookform(UploadBookForm uploadbookform) {
        this.uploadbookform = uploadbookform;
    }
/**
     * 上传书籍(同时书籍含有自定义标签)
     * 
     * @return
     */
    public String uploadbook() {
        String realPath = ServletActionContext.getServletContext().getRealPath("/BookImage");
        
         SimpleDateFormat date = new SimpleDateFormat("/yyyy/MM/dd");  
            String dateTime = date.format(new Date());  
            realPath += dateTime;  
              
            uploadbookform.setBook_picFileName(UUID.randomUUID().toString() + uploadbookform.getBook_picFileName().substring(uploadbookform.getBook_picFileName().lastIndexOf('.')));  
              
            System.out.println(uploadbookform.getBook_picContentType());   
            //控制图片类型  
            if(uploadbookform.getBook_picContentType().equals("image/gif") || uploadbookform.getBook_picContentType().equals("image/jpeg") ||   
                    uploadbookform.getBook_picContentType().equals("image/png") || uploadbookform.getBook_picContentType().equals("image/bmp") ||   
                    uploadbookform.getBook_picContentType().equals("image/x-icon") || uploadbookform.getBook_picContentType().equals("image/pjpeg"))  
            {  
                //判断文件是否为空,并且文件不能大于2M  
                if(uploadbookform.getBook_pic() != null && uploadbookform.getBook_pic().length() < 2097152)  
                {    
                    //根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。  
                    File filePath = new File(new File(realPath), uploadbookform.getBook_picFileName());    
                    //判断路径是否存在    
                    if(!filePath.getParentFile().exists())  
                    {  
                        //如果不存在,则递归创建此路径   
                        filePath.getParentFile().mkdirs();  
                    }  
                    System.out.println(uploadbookform.getBook_picFileName());   
                    System.out.println(filePath.getParentFile());   
                    //将文件保存到硬盘上,Struts2会帮我们自动删除临时文件  
                    try {  
                        FileUtils.copyFile(uploadbookform.getBook_pic(), filePath);  
                    } catch (IOException e) {  
                        System.out.println("图片上传失败");   
                        e.printStackTrace();  
                    }   
                }    
            } 
        
        bookservice.uploadBook(uploadbookform);
        addActionMessage("上传成功");
        return "uploadbooksuccess";
    }
    }

上面还是要遵守约定大于配置,注意名称的命名,uploadFileContentType和uploadFileFileName必须遵守Struts2的规则.

 

Struts2默认文件的上传大小是2M,当大于2M时会抛出异常,这里我们可以在struts.xml文件里做如下配置,控制上传文件的大小:

<struts>    
<constant name="struts.multipart.maxSize" value="10485761"/>     
</struts>


© 著作权归作者所有

共有 人打赏支持
小和尚敲代码
粉丝 23
博文 85
码字总数 28687
作品 0
南昌
程序员
struts2整合CKEditor和CKFinder实现上传

上一篇文章给大家分享了CKEditor+CKFinder+JSP实现了在线编辑器上传图片的功能,这里在给大家分享一下如何在前面的基础上在struts2下实现这样的功能。 实现与Struts2的整合,整合的过程确实e...

teacheryang ⋅ 2016/10/08 ⋅ 0

ueditor1.3.6jsp版在struts2应用中上传图片报"未找到上传文件"解决方案

在struts2应用中使用ueditor富文本编辑器上传图片或者附件时,即使配置好了上传路径信息,也会出现"未找到上传文件"的错误提示,出先该问题的原因是:在配置struts过滤器,过滤路径设置/*方式...

Jialy ⋅ 2014/03/21 ⋅ 16

JEECMS v3.0.2正式版开源发布

JEECMS V3.0.2 FINAL终于和大家见面了,这是3.x的第一个正式版。大家一直关注的源码也已一并发布。 3.x相对于2.x做了很大的改进,不管从数据库设计还是技术架构上,都有很大变化。事实上,3...

小编辑 ⋅ 2011/01/05 ⋅ 2

Java程序员从笨鸟到菜鸟之(七十一)细谈struts2(十三)struts2实现文件上传和下载详解

文件上传和文件下载是我们在web应用程序中常用的两个功能,在java中,实现这两种功能的方式也有很多种,其中struts2就给我们提供了一种算是比较简单的方式吧,下面我们就一起来看一下,首先我...

长平狐 ⋅ 2012/11/12 ⋅ 1

SSH2中配置了*.action 访问jsp页面访问出错

为了做图片上传时候能够用request得到路径。只能把struct2中在web.xml的配置改成了 struts2 org.apache.struts2.dispatcher.FilterDispatcher struts2...

小石头哥 ⋅ 2012/08/21 ⋅ 8

问一下struts2用ajax上传图片的问题

问一下struts2用ajax上传图片的问题 用struts2上传的方式。但是不行。 百度谷歌了半了发现应该是ajax安全机制问题。传到后台的不是数据流。 而是字符串。但是如何处理这些字符串呢?...

th小米粥 ⋅ 2011/11/03 ⋅ 1

简单解决Struts2和FckEditor冲突的方法

最近用了struts2.0之后,fck上传图片总是弹出警告: Security error. You probably don't have enough permissions to upload. Please check your server 什么原因呢? 一般情况下跟你的web...

oecp ⋅ 2011/04/14 ⋅ 2

Kindeditor 上传功能

Kindeditor支撑java,供给的示例法度由jsp充当文件经管和上传,以前应用好好的,但此次应用的struts2,而struts过滤器包装了request,对就因为这点, kindeditor不克不及应用了。在kindedito...

i33 ⋅ 2012/02/15 ⋅ 0

求javaWeb编程高手!!关于struts上传文件的问题~~

我利用struts2完成了上传功能,将上传的图片存储在tomcat服务器的webapp的该项目的文件夹下,struts上传代码是这样的: 上传后不久,图片连同文件夹就会消失的无影无踪,问了一个学长,他说这...

上帝爱众生 ⋅ 2014/05/16 ⋅ 0

Uploadify——学习(1):在Struts2的使用

Uploadify是一个基于Jquery的文件上传组件,官网http://www.uploadify.com/可以在官网获得该组件,运行演示示例,下载帮助文档。 作为Web前端的增强技术,Jquery给用户以更好的体验和交互,增...

凡尘里的一根葱 ⋅ 2015/09/12 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Java 后台判断是否为ajax请求

/** * 是否是Ajax请求 * @param request * @return */public static boolean isAjax(ServletRequest request){return "XMLHttpRequest".equalsIgnoreCase(((HttpServletReques......

JavaSon712 ⋅ 28分钟前 ⋅ 0

Redis 单线程 为何却需要事务处理并发问题

Redis是单线程处理,也就是命令会顺序执行。那么为什么会存在并发问题呢? 个人理解是,虽然redis是单线程,但是可以同时有多个客户端访问,每个客户端会有 一个线程。客户端访问之间存在竞争...

码代码的小司机 ⋅ 59分钟前 ⋅ 0

到底会改名吗?微软GVFS 改名之争

微软去年透露了 Git Virtual File System(GVFS)项目,GVFS 是 Git 版本控制系统的一个开源插件,允许 Git 处理 TB 规模的代码库,比如 270 GB 的 Windows 代码库。该项目公布之初就引发了争...

linux-tao ⋅ 今天 ⋅ 0

笔试题之Java基础部分【简】【二】

1.静态变量和实例变量的区别 在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变...

anlve ⋅ 今天 ⋅ 0

Lombok简单介绍及使用

官网 通过简单注解来精简代码达到消除冗长代码的目的 优点 提高编程效率 使代码更简洁 消除冗长代码 避免修改字段名字时忘记修改方法名 4.idea中安装lombnok pom.xml引入 <dependency> <grou...

to_ln ⋅ 今天 ⋅ 0

【转】JS浮点数运算Bug的解决办法

37.5*5.5=206.08 (JS算出来是这样的一个结果,我四舍五入取两位小数) 我先怀疑是四舍五入的问题,就直接用JS算了一个结果为:206.08499999999998 怎么会这样,两个只有一位小数的数字相乘,怎...

NickSoki ⋅ 今天 ⋅ 0

table eg

user_id user_name full_name 1 zhangsan 张三 2 lisi 李四 `` ™ [========] 2018-06-18 09:42:06 星期一½ gdsgagagagdsgasgagadsgdasgagsa...

qwfys ⋅ 今天 ⋅ 0

一个有趣的Java问题

先来看看源码: public class TestDemo { public static void main(String[] args) { Integer a = 10; Integer b = 20; swap(a, b); System.out......

linxyz ⋅ 今天 ⋅ 0

十五周二次课

十五周二次课 17.1mysql主从介绍 17.2准备工作 17.3配置主 17.4配置从 17.5测试主从同步 17.1mysql主从介绍 MySQL主从介绍 MySQL主从又叫做Replication、AB复制。简单讲就是A和B两台机器做主...

河图再现 ⋅ 今天 ⋅ 0

docker安装snmp rrdtool环境

以Ubuntu16:04作为基础版本 docker pull ubuntu:16.04 启动一个容器 docker run -d -i -t --name flow_mete ubuntu:16.04 bash 进入容器 docker exec -it flow_mete bash cd ~ 安装基本软件 ......

messud4312 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部