简单文件上传
实现步骤:
(1)所需要的jar包链接:http://download.csdn.net/detail/ahy1024/4626028(小伙伴别怕麻烦哦。注册
了csdn之后你可以免费下载众多的资源。只为分享不为宣传)并搭建配置环境(准备工作:struts.xml , web.xml)
(2)在JSP中设定表单控件:<s:file name="ppt" label="上传"/
>,文件上传的前提是表单属性method=”post” enctype=”multipart/form-data”;
(3)在Action中定义属性:
private File ppt; //包含文件内容对应jsp中的name属性
private String uploadFileName; //上传文件的名称;
private String uploadContentType; //上传文件的MIME类型(可以自己了解一下);
当然别忘了封装(getter和setter方法)
这些属性都会随着文件的上传自动赋值,这也是Struts2框架比servlet(需要判断请求数据是表单数据还是文本数据来进行不同的处理)的区别和优势;
(4)在execute()中完成写入磁盘功能;
1、写好前台请求页面和success.jsp(成功页面)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
<s:form action="testupload" method="post" enctype="multipart/form-data">
<s:file name="ppt" label="PPTFile"></s:file>
<s:textfield name="pptDesc" label="PPTDesc"></s:textfield>
<s:submit></s:submit>
</s:form>
</body>
</html>
success.jsp(成功页面)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
<h4>成功 页面!!</h4>
</body>
</html>
2、web.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>Struts2</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>s2</filter-name>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>s2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
3、struts.xml文件配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!-- 配置国际化资源文件 -->
<constant name="struts.custom.i18n.resources" value="i18n"></constant>
<package name="default" namespace="/" extends="struts-default">
<action name="testupload"
class="com.cttc.struts.action.UploadFile">
<result>/success.jsp</result>
</action>
</package>
</struts>
4、action的业务处理
package com.cttc.struts.action;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import javax.servlet.ServletContext;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class UploadFile extends ActionSupport {
private static final long serialVersionUID = 1L;
private File ppt;
private String pptContentType;
private String pptFileName;
private String pptDesc;
public String getPptContentType() {
return pptContentType;
}
public void setPptContentType(String pptContentType) {
this.pptContentType = pptContentType;
}
public String getPptFileName() {
return pptFileName;
}
public void setPptFileName(String pptFileName) {
this.pptFileName = pptFileName;
}
public String getPptDesc() {
return pptDesc;
}
public void setPptDesc(String pptDesc) {
this.pptDesc = pptDesc;
}
public File getPpt() {
return ppt;
}
public void setPpt(File ppt) {
this.ppt = ppt;
}
@Override
public String execute() throws Exception {
//实际上就是我们要上传的文件的完整路径(本来地址)
System.out.println("文件对象:"+ppt);
System.out.println("文件类型:"+pptContentType);
System.out.println("文件名:"+pptFileName);
System.out.println(pptDesc);
//使用action上下文获取我们要保存的地址
ServletContext servletContext = ServletActionContext.getServletContext();
String dir = servletContext.getRealPath("/files/"+ pptFileName);
//这里就是你的上传文件的的保存地址可以再控制台上复制出来在电脑上查询出来
System.out.println("保存的地址:"+dir);
//我们要写入的地址(保存地址)的文件流
FileOutputStream os = new FileOutputStream(dir);
//我们要读取出(本来地址)的文件流
FileInputStream is = new FileInputStream(ppt);
byte[] buffer = new byte[1024];
int len = 0;
while((len=is.read(buffer))!= -1){
os.write(buffer, 0, len);
}
os.close();
is.close();
return super.execute();
}
}
至此呢,我们就能轻松完成文件的上传,是不是很简单呢?哈哈,是的!