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. Mac或Linux中对Android抓包

    转载说明 本篇文章可能已经更新,最新文章请转:http://www.sollyu.com/mac-or-linux-android-caught/ 说明 首先要到http://www.charlesp ...

  2. sgu 104 Little Shop of Flowers

    经典dp问题,花店橱窗布置,不再多说,上代码 #include <cstdio> #include <cstring> #include <iostream> #i ...

  3. C++ const修饰函数、函数参数、函数返回值

    const修饰函数 在类中将成员函数修饰为const表明在该函数体内,不能修改对象的数据成员而且不能调用非const函数.为什么不能调用非const函数?因为非const函数可能修改数据成员,cons ...

  4. Sublime Text 3的快捷键

    Sublime Text 3是一个非常了不起的软件,它不仅具有令人难以置信的内置功能(多行编辑和VIM模式),而且还支持插件.代码片段和其它许多东西. 今天,我们来总结一下Sublime Text 3 ...

  5. [数据库连接字符串] Access 连接字符串

    [数据库连接字符串] Access 连接字符串 //ODBC 标准安全策略 Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\mydatabase.mdb ...

  6. 走进WCF一 (异常如此多娇,引无数码农竞折煞)

    对于WCF一直都是只知其然,公司框架的架构者也只是对我们授之以鱼,而不授之以渔. 带着初学者的态度进入了大神Artech的博客,逐步慢慢上手. 我的解决方案(和大神的一模一样,只是过程中一波三折的) ...

  7. Tips of Python!

    Tips of Python!(Python 2.7) (不定期更新中-) 1. raw_input() 和 input(): raw_input() 将输入原封不动的保存为一个字符串 输入 1 + ...

  8. 10.MVC框架开发(Ajax应用)

    1.MVC自带的Ajax应用, 使用步骤: 第一步,引入js框架 <script src="../../Scripts/jquery-1.4.4.js" type=" ...

  9. Unity3d Shader开发(三)Pass(Fog )

    雾参数用于雾命令控制. 雾化是通过混合已生成的像素的颜色和基于到镜头的距离来确定的一个不变色来完成.雾化不会改变已经混合的像素的透明度值,只是改变RGB值. Syntax 语法 Fog { Fog C ...

  10. 一步步学习NHibernate(3)——NHibernate增删改查

    请注明转载地址:http://www.cnblogs.com/arhat 在上一章中,我们配置了以下NHibernate的运行环境, 并介绍了NHibernate的中两个非常中重要的接口"I ...