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. DataList和Repeater

    DataList和Repeater是两个十分有用的控件,在新闻列表和图片展示的地方经常用到.在这里简单的把他们介绍一下. 1.DataList: 前端页面: <asp:DataList ID=& ...

  2. 【HeadFirst设计模式】10.状态模式

    定义: 允许对象在内部状态改变时改变它 行为,对象看起来好像修改了它的类. OO原则: 封装变化 多用组合,少用继承 针对接口编程,不针对实现编程 为交互对象之间的松耦合设计而努力 类应该对扩展开放, ...

  3. 用VirtualBox构建MySQL测试环境笔记

    网络环境: 宿主机:Win7 VirtualBox 4.1.4 + Ubuntu 11.10 server 64bit 宿主机使用网线的时候,客户机在Bridged Adapter模式下,使用Athe ...

  4. Memcached服务器安装、配置、使用详解

    管理memcached服务 启动Memcached 一般情况下,简单地可以使用类似如下形式,启动Memcached服务: /usr/local/bin/memcached -d -m 64 -I 20 ...

  5. Sublime Text 中使用Git插件连接GitHub

    sublime Text的另一个强大之处在于它提供了非常丰富的插件,可以帮助程序员来适合大多数语言的开发.这些插件通过它自己的Package Controll(包管理)组件来安装,非常方便.一般常用的 ...

  6. ecshop二次开发 给商品添加自定义字段

    说起自定义字段,我想很多的朋友像我一样会想起一些开源的CMS(比如Dedecms.Phpcms.帝国)等,他们是可以在后台直接添加自定义字段的. 抱着这种想法我在Ecshop的后台一顿找,不过肿么都木 ...

  7. ubuntu u盘安装

    参考博客:http://www.bjwilly.com/archives/325.html 1.下载光盘映像 目前可选12.04LTS(长期支持版本) http://www.ubuntu.org.cn ...

  8. MVC4升级MVC5 异常处理

    使用过程中的一些烦人的事情,权当这篇文章是MVC4升级MVC5的异常合集吧,后期不定期更新. 在这里你可以看到ASP.NET MVC的发展历程以及你需要的版本和目前最稳定的版本.戳ASP.NET MV ...

  9. FolderBrowserDialog组件选择文件夹

    1.选择路径 this.folderBrowserDialog1.ShowDialog(); if (this.folderBrowserDialog1.ShowDialog() == DialogR ...

  10. protues仿真 51点亮点阵

    电路图 程序 /*============================== 点亮点阵心形 ================================*/ #include <REGX5 ...