使用Struts框架后, Struts2框架不会处理multipart/form-data的请求,它需要调用其他的上传文件框架来解析二进制数据。但是Struts在原有的上传解析器基础上做了很多的封装,简化了文件上传。主要是在Struts核心包中的default.properties文件中的文件解析器,配置如下所示。

# struts.multipart.parser=cos
# struts.multipart.parser=pell
struts.multipart.parser=jakart

根据Struts框架的配置可知,在Struts中默认是使用jakart的Common-FileUpload的文件上传框架,因此要使用文件上传功能,还需要加入commons-io-*.jar 和commons-fileupload-*.jar文件到WEB-INF下的lib包中,然后Build path一下,就可以使用了。

上传文件只需要下列几部就可以成功上传文件。

1.jsp页面加入如下代码:

 <body> <s:form action="test!file.action" method="POST"
        enctype="multipart/form-data">
        <s:file name="file" label="file"></s:file>
        <s:submit value="submit" />
    </s:form>
</body>

2、编写文件上传action,在action中加入如下代码判断,并生成get和set方法

 private File file;//上传文件信息
    private String fileContentType;//上传文件类别
    private String fileFileName;//上传文件文件名

3、重命名文件名

在此处主要是使用了java中的UUID类生成字符串作为文件名,代码如下所示

String fileName = UUID.randomUUID().toString()+ fileFileName.substring(fileFileName.lastIndexOf("."),fileFileName.length());

4、获取文件上传路径

主要是使用了ServletActionContext中的方法,代码如下所示

String path = ServletActionContext.getServletContext().getRealPath("/upload/"+fileName);

5、最后一步使用java文件流将文件上传到指定的路径中,代码如下所示

FileInputStream fis;
    try {
     fis = new FileInputStream(file);
     FileOutputStream fos = new FileOutputStream(path);
     byte[] buffer = new byte[1024];
     int len = 0;
     while ((len = fis.read(buffer)) > 0) {
      fos.write(buffer, 0, len);
     }
  } catch (Exception e) {
     e.printStackTrace();
     System.out.println("error:" + e.getMessage());
  }

完成上面几部之后,文件就可以成功上传到指定的文件夹中。但是,这个上传还处在许多的问题,上传文件的大小没有限制,文件的格式没有限制,这些都会带来很大的问题的,在后面的章节中将逐步的解决类似的问题。

Struts2上传文件(1)的更多相关文章

  1. Unable to find ‘struts.multipart.saveDir’ Struts2上传文件错误的解决方法

    Unable to find ‘struts.multipart.saveDir’ Struts2上传文件错误的解决方法 在使用struts2的项目中上传文件的时候出现了一个这样的错误: 2011-7 ...

  2. [JavaWeb基础] 009.Struts2 上传文件

    在web开发中,我们经常遇到要把文件上传下载的功能,这篇文章旨在指导大家完成文件上传功能 1.首先我们需要一个上传文件的页面. <!--在进行文件上传时,表单提交方式一定要是post的方式, 因 ...

  3. 利用struts2上传文件时,如果文件名中含有-符号,那么会出错

    利用struts2上传文件时,如果文件名中含有-符号,那么会出错 报错如下: HTTP Status 500 - C:\Program Files\Apache Software Foundation ...

  4. struts2上传文件添加进度条

    给文件上传添加进度条,整了两天终于成功了. 想要添加一个上传的进度条,通过分析,应该是需要不断的去访问服务器,询问上传文件的大小.通过已上传文件的大小, 和上传文件的总长度来评估上传的进度. 实现监听 ...

  5. 关于Struts2上传文件的最大Size的设置

    今天使用Struts2的文件上传控件时,在struts.xml中,将处理上传的action中的fileUpload拦截器的maximumSize参数设置为5000000,上传了一个3M的文件后发现控制 ...

  6. 菜鸟学SSH(五)——Struts2上传文件

    上传文件在一个系统当中是一个很常用的功能,也是一个比较重要的功能.今天我们就一起来学习一下Struts2如何上传文件. 今天讲的上传文件的方式有三种: 1,以字节为单位传输文件: 2,Struts2封 ...

  7. 工作笔记4.struts2上传文件到server

    本文介绍两种:上传文件到server的方式   一种是提交Form表单:还有一种是ajaxfileupload异步上传. 一.JSP中:     1.提交Form表单 为了能完毕文件上传,我们应该将这 ...

  8. Struts2上传文件

    jsp: <form action="file_upload.action" method="post" enctype="multipart/ ...

  9. struts2上传文件类型列表

    '.a'      : 'application/octet-stream',         '.ai'     : 'application/postscript',         '.aif' ...

随机推荐

  1. git相关知识:如何避免某些文件无需提交

    查看所有命令 git help -a 查看所有概念解释 git help -g 某个命令的具体帮助信息 git help command 如何避免某些文件无需提交? 合作开发时个人的约定的不上传的文件 ...

  2. Python \xd7\xaa\xd5\xbdOTT TV\xb1\xa6\xbd\xe0 编码

    import chardet s = '\xd7\xaa\xd5\xbdOTT TV\xb1\xa6\xbd\xe0\xc7\xa3\xca\xd6\xd2\xf8\xba\xd3\xa1\xa4\x ...

  3. 怎样编写高效android代码

    基于Android相关设备作为嵌入式设备范畴,在书写App应用的时候要格外关注效率.而且受电池电量的限制.这就导致嵌入式设备有诸多考虑.有限处理能力.因此就要求我们尽量去写高效的代码. 本文讨论了非常 ...

  4. Yii2系列教程三:Database And Gii

    上一篇文章我们理了一下Yii2的MVC,Forms和Layouts,这篇文章就直接按照约定来说说Yii2与数据库相关的一些事情,如果你觉得不够的话,不急,更具体的用法我会在后续的教程给出,并且这里也会 ...

  5. Hadoop之Hbase详解

    1.什么是Hbase HBASE是一个高可靠性.高性能.面向列.可伸缩的分布式存储系统, hbase是列式的分布式数据库 1.2.HBASE优势: 1)线性扩展,随着数据量增多可以通过节点扩展进行支撑 ...

  6. [TypeScript] Dynamically initialize class properties using TypeScript decorators

    Decorators are a powerful feature of TypeScript that allow for efficient and readable abstractions w ...

  7. selenium从入门到应用 - 5,页面对象设计模式下的页面模块

    本系列所有代码 https://github.com/zhangting85/simpleWebtest 本文将介绍一个Java+TestNG+Maven+Selenium的web自动化测试脚本环境下 ...

  8. 命名空间System.Configuration中不存在类型或命名空间名称ConfigurationManager

    C#连接数据库时.这是个非经常见的错误,我刚開始就直接using System.Configuration;还是没能解决,真相是要手动加入这个程序集的引用,在项目右键加入引用选择System.Conf ...

  9. (三)EasyUI 使用——form表单1

    form表单组件主要有以下内容(如下图)     1. validatebox验证框 姓名:必填/1-4个字符/必填中文 邮箱:必填/1-30个字符/必填符合邮箱格式/后缀必须是com或cn 密码验证 ...

  10. <转>多线程中的lua同步问题

    转自 http://www.cnblogs.com/ghost240/p/3526185.html 最近写paintsnow::start时出现了一个非常麻烦的BUG,程序的Release版本大约每运 ...