第一步:首先写个上传文件的页面(简单的一个form表单)

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>文件上传</title>
</head>
<body>
<h1>文件上传</h1>
<br><br>
<form action="/Struts2-day02pm/upload/one_upload.action" method="post" enctype="multipart/form-data">
文件上传1:<br><br>
<input type="file" name="oneFile"><br><br>
<input type="submit" value="开始上传">
</form> </body>

第二步:创建一个基类BaseAction.java,继承ActionSupport,并实现ServletRequestAware,ServletResponseAware,ServletContextAware三个接口,重写三个接口的set方法

public class BaseAction extends ActionSupport implements ServletRequestAware,ServletResponseAware,ServletContextAware{
/**
* 编写一个基类,继承ActionSupport并实现相应的接口
* 以后的Action直接继承该类,就可以简单获取到Servlet API
* 这是一个典型的适配设计模式
* @author Owen
*/ private static final long serialVersionUID = 7267018575222346353L; @Override
public void setServletContext(ServletContext servletContext) {
} @Override
public void setServletResponse(HttpServletResponse response) {
} @Override
public void setServletRequest(HttpServletRequest request) {
} }

第三步:创建OneUploadAction请求处理类,继承BaseAction

public class OneUploadAction extends BaseAction {

    private static final long serialVersionUID = -4445894434193884175L;
// 该属性名必须和<input type="file" name="oneFile">中name值一致
private File oneFile;
// 真实名称
private String oneFileFileName;
// 文件类型
private String oneFileContentType; private HttpServletRequest request; @Override
public void setServletRequest(HttpServletRequest request) {
this.request = request;
} @Override
public String execute() throws Exception {
// 获取保存上传文件在服务器的真是路径
String uploadPath = request.getServletContext().getRealPath("upload");
System.out.println(uploadPath);//目录真是路径
System.out.println("oneFile--"+oneFile.getName());//文件临时名称
System.out.println("oneFileFileName--"+oneFileFileName);//文件原始名称
System.out.println("oneFileContentType--"+oneFileContentType);//文件类型
// 第一种:该步骤适合上传小文件
// 将临时文件复制到硬盘上的真是路径
/*
File file = new File(uploadPath, oneFileFileName);//拼接文件的存放路径和存放文件的真实名称
FileUtils.copyFile(oneFile, file);//将临时文件复制到上面这个路径
*/ // 第二种:适合大文件上传操作
/*InputStream is = null;
OutputStream os = null; is = new FileInputStream(oneFile);
os = new FileOutputStream(new File(uploadPath,oneFileFileName)); byte[] buffer = new byte[500];
int length = 0;
while((length=is.read(buffer,0,buffer.length)) != -1){
os.write(buffer, 0,length);
}
os.close();
is.close();*/
copyFile(uploadPath); return SUCCESS;
}
public void copyFile(String uploadPath){
InputStream is = null;
OutputStream os = null; try {
is = new FileInputStream(oneFile);
os = new FileOutputStream(new File(uploadPath,oneFileFileName)); byte[] buffer = new byte[500];
int len = 0;
while((len=is.read(buffer,0,buffer.length)) != -1){
os.write(buffer, 0,len);
}
os.close();
is.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } public File getOneFile() {
return oneFile;
} public void setOneFile(File oneFile) {
this.oneFile = oneFile;
} public String getOneFileFileName() {
return oneFileFileName;
} public void setOneFileFileName(String oneFileFileName) {
this.oneFileFileName = oneFileFileName;
} public String getOneFileContentType() {
return oneFileContentType;
} public void setOneFileContentType(String oneFileContentType) {
this.oneFileContentType = oneFileContentType;
} }

第三步:配置struts.xml文件

<struts>

    <package name="upload-default" namespace="/upload" extends="struts-default">

        <action name="one_upload" class="com.struts2.day02pm.action.OneUploadAction">
<result>/WEB-INF/jsp/one_upload_ok.jsp</result>
</action> </package> </struts>

第四步:浏览器测试

Struts2单文件上传的更多相关文章

  1. Struts2单文件上传原理及示例

    一.文件上传的原理 表单元素的enctype属性指定的是表单数据的编码方式,该属性有3个值: 1.application/x-www-form-urlencoded:这是默认编码方式,它只处理表单域里 ...

  2. Struts2 单文件上传

    Struts2 提供了更为简便的文件上传机制,将文件上传的复杂操作都封装到commons-fileupload.jar .commons-io.jar两个jar包中,然后再程序中使用简单的几句代码就能 ...

  3. struts2的文件上传

    在做B/S系统时,通常会涉及到上传文件和下载文件,在没接struts2框架之前,我们都是使用apache下面的commons子项目的FileUpload组件来进行文件的上传,但是那样做的话,代码看起来 ...

  4. struts2实现文件上传和下载

    在做B/S系统时,通常会涉及到上传文件和下载文件,在没接struts2框架之前,我们都是使用apache下面的commons子项目的FileUpload组件来进行文件的上传,但是那样做的话,代码看起来 ...

  5. Struts2实现单文件上传

    首先配置一下web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi ...

  6. 【Struts2学习笔记(9)】单文件上传和多文件上传

    (1)单文件上传 第一步:在WEB-INF/lib下增加commons-fileupload-1.2.1.jar.commons-io-1.3.2.jar. 这两个文件能够从http://common ...

  7. Struts2之文件上传(单文件/多文件)

    <一>简述: Struts2的文件上传其实也是通过拦截器来实现的,只是该拦截器定义为默认拦截器了,所以不用自己去手工配置,<interceptor name="fileUp ...

  8. struts2之单文件上传(7)

    前台页面jsp <!-- 拦截的时候用这个 <s:form action="uploadAction" enctype="multipart/form-dat ...

  9. struts2实现文件上传(多文件上传)及下载

    一.要实现文件上传,需在项目中添加两个jar文件 二.上传准备的页面 注:必须植入enctype="multipart/form-data"属性,以及提交方式要设置成post &l ...

随机推荐

  1. Devexpress之popupMenu

    1.拖放一个BarManager控件barManager1和一个PopupMenu控件popupMenu1 2.设置popupMenu1的Manager属性为barManager1 3.拖放一个Tex ...

  2. QT更改程序图标

    方法只要几个步骤就好了,如下: 1.准备好一个ico格式的图标文件,例如demo.ico 2.创建一个rc文件, 例如demo.rc. 并copy下面代码: // Generated by ResEd ...

  3. ARM学习笔记10——GNU ARM命令行工具

    一.编译器arm-linux-gcc 1.用arm-linux-gcc编译一个程序,一般它是要经过如下步骤的: 1.1.预处理阶段 编译器把上述代码中stdio.h编译进来,使用GCC的选项-E可以使 ...

  4. [Qt]Qt中TreeWidget拖拽事件

    文章在简书里啦 http://www.jianshu.com/p/45b740060aca

  5. hdoj 1083 Courses【匈牙利算法】

    Courses Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total S ...

  6. 把谷歌等webkit内核浏览器变为输入文本编辑器的方法

    只需要在地址栏输入 data:text/html, <html contenteditable> 回车后即可看到效果

  7. Java调用MySQL存储过程

    Java调用MySQL的存储过程,需要用JDBC连接,环境eclipse 首先查看MySQL中的数据库的存储过程,接着编写代码调用 mysql> show procedure status; + ...

  8. 转 python 之 分割参数getopt

    python 之 分割参数getopt os下有个方法walk,非常的好用,用来生成一个generator.每次可以得到一个三元tupple,其中第一个为起始路径,第二个为起始路径下的文件夹,第三个是 ...

  9. hdu 2821 Pusher(dfs)

    Problem Description PusherBoy is an online game http://www.hacker.org/push . There is an R * C grid, ...

  10. MySQLdb安装和使用2

    http://blog.chinaunix.net/uid-8487640-id-3183185.html MySQLdb是Python连接MySQL的模块,下面介绍一下源码方式安装MySQLdb: ...