Struts2文件上传

  Struts 2 Struts 1一样,文件上传都是封装了ApacheCommon-fileupload方法,下面我一步步带大家实现上传。


一、环境搭建


  建立java web项目,引入jar包,放在WEB-INF/lib下。下载地址:Struts2上传文件的jar包下载地址 。Web.xml配置文件,不要忘记配置Struts2过滤器

<pre name="code" class="html"><?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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	version="2.5">
	<filter>
		<filter-name>struts2</filter-name>
		<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
</web-app>
 
 

二、页面表单

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>    
    <title>struts2文件上传例子</title>	
  </head>
  
  <body>
  	<form action="upload.action" method="post" enctype="multipart/form-data">
		标题:<input type="text" name="title"><br>
		文件:<input type="file" name="myFile"><br>
		<input type="submit" value="提交上传">
	</form>
  </body>
</html>

  注意:

  页面整体的pageEncoding=UTF-8”;

  文件上传enctype="multipart/form-data"。enctype这个属性管理的是表单的MIME编码,共有三个值可选:

    1、application/x-www-form-urlencoded

    2、multipart/form-data

    3、text/plain

  其中application/x-www-form-urlencoded是默认值,作用是设置表单传输的编码。在htmlform表单里默认就是这种传输编码类型。

  而multipart/form-data是用来制定传输数据的特殊类型的,主要就是我们上传的非文本的内容,比如图片或是是mp3等等。

  text/plain是纯文本传输的意思,在发邮件的时候要设置这种编码类型,否则会出现接收时编码混乱的问题。

MIME,它的英文全称是"MultipurposeInternet Mail Extensions" 多功能Internet邮件扩充服务,它是一种多用途网际邮件扩充协议。简单说,它就是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。

 

三、Action(UploadAction)


package com.xx.struts2;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import com.opensymphony.xwork2.Action;

public class UploadAction {

	private String title;

	// 可以得到上传文件的名称
	// 规则:输入域的名称+固定字符串FileName
	private String myFileFileName;

	// 取得文件数据
	// 规则:File 输入域的名称
	private File myFile;

	// 取得内容类型
	// 规则:输入域的名称+固定字符串ContentType
	// private String myFileContentType;

	public String getMyFileFileName() {
		return myFileFileName;
	}

	public void setMyFileFileName(String myFileFileName) {
		this.myFileFileName = myFileFileName;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public File getMyFile() {
		return myFile;
	}

	public void setMyFile(File myFile) {
		this.myFile = myFile;
	}

	

	public String execute() throws Exception {
		InputStream is = null;
		OutputStream os = null;
		try {
			is = new BufferedInputStream(new FileInputStream(myFile));
			os = new BufferedOutputStream(new FileOutputStream("f:\\"
					+ myFileFileName));
			byte[] buffer = new byte[1024];
			int len = 0;
			while ((len = is.read(buffer)) > 0) {
				os.write(buffer, 0, len);
			}
		} finally {
			if (is != null) {
				is.close();
			}
			if (os != null) {
				os.close();
			}
		}
		return Action.SUCCESS;
	}
}

四、Struts.xml配置

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>	
	<!-- 当struts.xml配置文件发生修改,会立刻加载,在生产环境下最好不要配置 -->
	<constant name="struts.configuration.xml.reload" value="true" />
	<!-- 会提供更加友好的提示信息 -->
	<constant name="struts.devMode" value="true" />
	<!-- 需要继承struts-default包,这样就拥有的最基本的功能 -->
	<package name="upload-package" extends="struts-default">
		<action name="upload" class="com.xx.struts2.UploadAction">
			<result name="success">/upload_success.jsp</result>
		</action>
	</package>
</struts>

  很简单就实现了,那么如果是多文件同时上传呢?


你可能感兴趣的:(java,文件上传,struts2.0)