第一步:首先写个上传文件的页面(简单的一个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. HDU-2539 点球大战

    点球大战 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  2. python 以标准输出(sys.stdout)为例,看python的标准输入、标准错误输出

    看了一个博客,挺不错的.http://www.cnblogs.com/turtle-fly/p/3280519.html 标准输出(sys.stdout)对应的操作就是print(打印)了,标准输入( ...

  3. 解决ubuntu合盖后无法唤醒

    解决办法: 安装laptop-mode-tools工具包 1. 检查是否安装了grep laptop-mode-tools 工具包 $ dpkg -l | grep laptop-mode-tools ...

  4. HDOJ 1004题 Let the Balloon Rise strcmp()函数

    Problem Description Contest time again! How excited it is to see balloons floating around. But to te ...

  5. phpDesigner 工具快捷键巧用

    Zend Studio工具默认的快捷方式, 如果你从事php工作, 自然能够体会到一些便利性, 比如CTRL+D, 可以直接复制当前一行, 这对于重复代码及调试都有很大帮助. Ctrl+U转换大小写之 ...

  6. SpringNote02.Blog系统迁移到Linux下

    基于SpringMVC-Hibernate的博客系统还在继续开发中 . 项目地址:https://github.com/defshine/SpringBlog 整个项目迁移到linux下开发,安装in ...

  7. hdu4488 Faulhaber’s Triangle(模拟题)

    Faulhaber’s Triangle Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

  8. JavaScript读取txt文本文件方法详解

    http://blog.163.com/sophie8910@126/blog/static/8304612620122834121264/ 第一步:创建一个可以将文件翻译成文件流的对象. Var f ...

  9. [Ionic] Ionic Quickstart for Windows

    1. Install ionic 2. Create ionic app ionic start myApp tabs //create a app cd myApp ionic serve // o ...

  10. HDU2149-Good Luck in CET-4 Everybody!(博弈,打表找规律)

    Good Luck in CET-4 Everybody! Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ...