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. Generate GUID using vbscript

    在 .msi 中 的 Component table,查看 ComponentId 列,是一个16进制数的字符串, 用 InstallShield IDE 添加一个 component ,Compon ...

  2. 安卓热更新之Nuwa实现步骤

    安卓热更新之Nuwa实现步骤 最近热更新热修复的功能在安卓应用上越发火热,终于我的产品也提出了相应的需求. 经过两天的研究,搞定了这个功能,在这里还要多谢大神们的博客,大神们的原理分析很到位,不过对于 ...

  3. java中的IO流

    Java中的IO流 在之前的时候我已经接触过C#中的IO流,也就是说集中数据固化的方式之一,那么我们今天来说一下java中的IO流. 首先,我们学习IO流就是要对文件或目录进行一系列的操作,那么怎样操 ...

  4. top每个参数的意义

    上图来源于本人虚拟机,作为每个参数解释的参考 10:32:20:现在的时间 up 1 min : 服务器运行的时长 1 user:现在只有1个用户登录 load average: 0.74, 0.25 ...

  5. 解决VS2008打开假死或者打开设计模式假死的问题

    我昨天刚装完OFFICE 2010一直也没重启,vs2008是可以使用的.今早来到办公室,打开工程发现开了半天VS2008一般空白,查看应用程序显示正在运行,再查看进程发现里面多一个setup.exe ...

  6. 创建安全的ashx文件,ashx编译

    <%@ WebHandler Language="C#" Class="Handler2" %> using System; using Syste ...

  7. html5绘制折线图

    html5绘制折线图详细代码 <html> <canvas id="a_canvas" width="1000" height="7 ...

  8. Linux硬链接和符号链接(转)

    Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link).默认情况下,ln命令产生硬链接. [硬连接]  硬连接指通过索引节点来进行连接.在Li ...

  9. 从Windows远程Ubuntu

    关键字:Windows,Ubuntu,Putty,WinSCP OS:Windows 7,Ubuntu. 1.下载Putty:http://www.putty.org/. 2.双击运行putty.ex ...

  10. DatePicker (JQ-UI) 的z-index问题

    使用jq-ui的 datepicker ,发现日期弹出层被 <div class="fixed" style="z-index: 2; position: abso ...