Struts2本身并没提供上传的组件,我们可以通过调用上传框架来实现文件的上传。

一、配置上传解析器

首先要配置项目的框架,也就是倒导入"struts2- core-2.2.1.jar"库文件,找到org.apache.struts2包下的default.porperties资源文件。如下图;资源文 件中给出了不同的strus2的默认配置,我们可看到struts2默认是jakarta作为其文件上传的解析器。

  jakarta
是Commo-FileUpload的框架。如果要使用Commo-FileUpload框架来上传文件,只需将"commons-
fileupload-1.2.1.jar"和"commons-io-1.3.2.jar"两个jar复制到项目中的WEB-INF/lib目录下就
可。

如果想要使用COS框架来上传文件,只需将“cos.jar”复制到项目中就可以,然后在修改struts.multipart.parser常量值。

修改常量值有两种方法,一是在"struts.xml"中修改,代码如下:

<constant name="struts.multipart.paeser" value="cos"></constant>

二是在struts.properties中修改,代码如下:

sruts.multipart.parser=cos

二、实现文件上传的Action

创建表单:upload.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

  1. <%
  2. String path = request.getContextPath();
  3. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
  4. %>
  5. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  6. <html>
  7. <head>
  8. <base href="<%=basePath%>">
  9. <title>Struts2文件上传</title>
  10. <meta http-equiv="pragma" content="no-cache">
  11. <meta http-equiv="cache-control" content="no-cache">
  12. <meta http-equiv="expires" content="0">
  13. <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
  14. <meta http-equiv="description" content="This is my page">
  15. <!--
  16. <link rel="stylesheet" type="text/css" href="styles.css">
  17. -->
  18. </head>
  19. <body>
  20. <center>
  21. <h1>Struts 2完成上传</h1>
  22. <form action="upload.action" method="post" enctype="multipart/form-data">
  23. <table>
  24. <tr>
  25. <td>用户名:</td>
  26. <td><input type="text" name="username" ></td>
  27. </tr>
  28. <tr>
  29. <td>上传文件:</td>
  30. <td><input type="file" name="myFile"></td>
  31. </tr>
  32. <tr>
  33. <td><input type="submit" value="上传"></td>
  34. <td><input type="reset"></td>
  35. </tr>
  36. </table>
  37. </form>
  38. </center>
  39. </body>
  40. </html>

完成上传Action

package net.hncu.struts2.action;

  1. import java.io.File;
  2. import java.io.FileInputStream;
  3. import java.io.FileOutputStream;
  4. import java.io.InputStream;
  5. import java.io.OutputStream;
  6. import org.apache.struts2.ServletActionContext;
  7. import com.opensymphony.xwork2.ActionSupport;
  8. public class UploadAction extends ActionSupport {
  9. // username属性用来封装用户名
  10. private String username;
  11. // myFile属性用来封装上传的文件
  12. private File myFile;
  13. // myFileContentType属性用来封装上传文件的类型
  14. private String myFileContentType;
  15. // myFileFileName属性用来封装上传文件的文件名
  16. private String myFileFileName;
  17. //获得username值
  18. public String getUsername() {
  19. return username;
  20. }
  21. //设置username值
  22. public void setUsername(String username) {
  23. this.username = username;
  24. }
  25. //获得myFile值
  26. public File getMyFile() {
  27. return myFile;
  28. }
  29. //设置myFile值
  30. public void setMyFile(File myFile) {
  31. this.myFile = myFile;
  32. }
  33. //获得myFileContentType值
  34. public String getMyFileContentType() {
  35. return myFileContentType;
  36. }
  37. //设置myFileContentType值
  38. public void setMyFileContentType(String myFileContentType) {
  39. this.myFileContentType = myFileContentType;
  40. }
  41. //获得myFileFileName值
  42. public String getMyFileFileName() {
  43. return myFileFileName;
  44. }
  45. //设置myFileFileName值
  46. public void setMyFileFileName(String myFileFileName) {
  47. this.myFileFileName = myFileFileName;
  48. }
  49. public String execute() throws Exception {
  50. //基于myFile创建一个文件输入流
  51. InputStream is = new FileInputStream(myFile);
  52. // 设置上传文件目录
  53. String uploadPath = ServletActionContext.getServletContext()
  54. .getRealPath("/upload");
  55. // 设置目标文件
  56. File toFile = new File(uploadPath, this.getMyFileFileName());
  57. // 创建一个输出流
  58. OutputStream os = new FileOutputStream(toFile);
  59. //设置缓存
  60. byte[] buffer = new byte[1024];
  61. int length = 0;
  62. //读取myFile文件输出到toFile文件中
  63. while ((length = is.read(buffer)) > 0) {
  64. os.write(buffer, 0, length);
  65. }
  66. System.out.println("上传用户"+username);
  67. System.out.println("上传文件名"+myFileFileName);
  68. System.out.println("上传文件类型"+myFileContentType);
  69. //关闭输入流
  70. is.close();
  71. //关闭输出流
  72. os.close();
  73. return SUCCESS;
  74. }
  75. }

注意:此处myFile与jsp表单中file域的name一样,同时ContentType和FileName必须加上MyFile,即前缀与表单名一致(myFile,myFileContentType,myFileFileName)这三个值是struts2

自动获取的

    配置上传Action

<?xml version="1.0" encoding="UTF-8" ?>

  1. <!DOCTYPE struts PUBLIC
  2. "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
  3. "http://struts.apache.org/dtds/struts-2.0.dtd">
  4. <struts>
  5. <package name="struts2" extends="struts-default">
  6. <action name="upload" class="net.hncu.struts2.action.UploadAction">
  7. <result name="success">/result.jsp</result>
  8. <result name="input">/upload.jsp</result>
  9. </action>
  10. </package>
  11. <!-- Add packages here -->
  12. </struts>

测试页面:


 

本文转载地址:http://ihanfeng.iteye.com/blog/834232

stuts2的上传(转载)的更多相关文章

  1. ueditor 单独图片上传 转载

    <body> <script type="text/javascript"> //这个是图片上传的,网上还有附件上传的 (function($) { var ...

  2. java TCP并发实现文件上传---转载(PS:适合java1.6之前)

    /** 客户端 1.服务端点 2.读取客户端已有的文件数据 3.通过socket输出流发给服务端 4.读取服务端反馈信息 5.关闭 **/ import java.io.*; import java. ...

  3. 支持多文件上传,预览,拖拽,基于bootstrap的上传插件fileinput 的ajax异步上传(转载)

    首先需要导入一些js和css文件 <link href="__PUBLIC__/CSS/bootstrap.css" rel="stylesheet"&g ...

  4. Java代码实现文件上传(转载)

    刚刚发表了一篇Java发送电子邮件,以前真是没注意,commons里这么多常用项目,惭愧呀,直到现在回顾;要学习的真是太多了,还是缺少真正的学习能力... 这里用到的是commons-fileuplo ...

  5. VS2010开发MFC ActiveX,摄像头拍照上传Webservice(1)

    最近工作项目,BS中需要用到摄像头拍照,需要存储本地,同时上传到服务器,尝试使用vc++做ActiveX来实现. 完全没有使用过vc,上网搜索各种知识,初步完成.在这里记录下有帮助的资料. 第一步:编 ...

  6. 【Java Web开发学习】Spring MVC文件上传

    [Java Web开发学习]Spring MVC文件上传 转载:https://www.cnblogs.com/yangchongxing/p/9290489.html 文件上传有两种实现方式,都比较 ...

  7. 【转载】兼容php5,php7的cURL文件上传示例

    转载来自: http://www.huanlinna.com/2016/06/25/coding/php5-php7-upload-demo-via-curl.html https://segment ...

  8. 在asp.net利用jquery.MultiFile实现多文件上传(转载)

    转载地址:http://www.cnblogs.com/scy251147/archive/2010/09/30/1839313.html 官网链接:http://www.fyneworks.com/ ...

  9. SecureCRT上传bash: rz: command not found(转载)

    转载自:http://blog.csdn.net/zhangdaiscott/article/details/18141017 -bash: rz: command not found rz命令没找到 ...

随机推荐

  1. ORA-22275: invalid LOB locator specified

    性能测试20行和20000行的出现错误 20行的字符没有问题,两万行的出行问题如下 [2014-02-11 09:21:03.343665][17694862] Level 0 cicmpub.C: ...

  2. java 泛型 窜讲

    一.为什么使用泛型      复用性:泛型的本质就是参数化类型,因而使用编写的泛型代码可以被许多不同类型的对象所复用.      安全性:在对类型Object引用的参数操作时,往往需要进行显式的强制类 ...

  3. centos svn安装

    http://fengjunoo.iteye.com/blog/1759265(参考) 以前在ubuntu上安装过一次svn,那次弄得有些麻烦. 这次记录下centos环境下安装svn的步骤 其实简单 ...

  4. USB初始化

    //USB初始化void CFileManagerDlg::usbinit(){ #define BUFFER_SIZE 64 struct usb_bus *bus; struct usb_devi ...

  5. Linux启动级别

    一共有7种启动级别,分别为: #   0 - halt (Do NOT set initdefault to this)  #   1 - Single user mode  #   2 - Mult ...

  6. js 数字,金额 用逗号 隔开。数字格式化

    例如: 12345格式化为12,345.00 12345.6格式化为12,345.60 12345.67格式化为 12,345.67 只留两位小数. 回来后写了个格式化函数.可以控制小数位数,自动四舍 ...

  7. android通过泛型获取控件或视图

    @SuppressWarnings("unchecked") public <T extends Fragment> T getFragment(int id) { T ...

  8. Universal-Image-Loader(UIL)使用方法&流程图&源码分析 ----- 未完

    GitHub源码: Android-Universal-Image-Loader Features Multithread image loading (async or sync) 多线程加载(同步 ...

  9. python获取系统时间

    import time print time.time() 输出的结果是: 1279578704.6725271 但是这样是一连串的数字不是我们想要的结果,我们可以利用time模块的格式化时间的方法来 ...

  10. 基于BOOST 实现并发服务器框架

    一:设计思路 本服务器框架使用 UDP 传输协议,程序柱线程等待客户端数据,并将数组存取队列缓冲区.另外可开启多个工作线程,工作线程可以依据具体项目实现不同的功能 ,例如可以将队列缓冲区中的数据逐个取 ...