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. Android_Json实例

    概要: 最近由于自己的兴趣,想在Android开发一个自己的App,需要使用服务器,所以交换数据是逃不掉了的,但是学生党没有固定的服务器,因此使用的新浪的SAE,在学习的前期下可以尝试一下,挺不错的一 ...

  2. start-stop-daemon 命令

    Usage: start-stop-daemon [<option> ...] <command> Commands: -S|–start — <argument> ...

  3. SQL函数说明大全 (转)

    一旦成功地从表中检索出数据,就需要进一步操纵这些数据,以获得有用或有意义的结果.这些要求包括:执行计算与数学运算.转换数据.解析数值.组合值和聚合一个范围内的值等. 下表给出了T-SQL函数的类别和描 ...

  4. Cent OS 常用 命令

    1.开机自动联网操作 需要root权限 vim /etc/sysconfig/network-scripts/ifcfg-p4p1(p4p1 为网络链接名称)这个文件, 把ONBOOT="n ...

  5. 【springmvc Request】 springmvc请求接收参数的几种方法

    通过@PathVariabl注解获取路径中传递参数 转载请注明出处:springmvc请求接收参数的几种方法 代码下载地址:http://www.zuida@ima@com/share/1751862 ...

  6. STL set_difference set_intersection set_union 操作

    以下是STL algorithm的几个函数,使用的条件是有序容器,所以 vector在被sort了之后是可以使用的,set也是可以使用的. set_difference 这个是求得在第一个容器中有,第 ...

  7. Python之创建单元素tuple

    tuple和list一样,可以包含 0 个.1个和任意多个元素. 包含多个元素的 tuple,前面我们已经创建过了. 包含 0 个元素的 tuple,也就是空tuple,直接用 ()表示: >& ...

  8. windows store app 拷贝文件到pc目录

    (function () { "use strict"; WinJS.Binding.optimizeBindingReferences = true; var app = Win ...

  9. Nhibernate 一对多,多对一配置

    先来分析下问题,这里有两张表:Users(用户表) U和PersonalDynamic(用户动态表) PD,其中PD表的UserId对应U表的Id 如图: 现在映射这两张表: 如图: User.hbm ...

  10. poj 3667 Hotel (线段树)

    http://poj.org/problem?id=3667 Hotel Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 94 ...