第十六部分_Struts2.1文件上传详解

文件上传要求:

  • 表单设为post
  • enctype="multipart/form-data"
  • 服务器端File对应的名字与jsp中指定的文件name相同(对于真正上传的文件), 而String *FileName对应上传的文件名(*表示jsp中文件name)
  • 添加Jar包(commons-io-1.3.2.jar),否则上传失败,抛出io相关类找不到的信息。 否则文件上传失败

首先,写一个upload.jsp:

引入标签库:

<%@ taglib uri="/struts-tags" prefix="s"%>

body体中(struts标签默认表单提交方式为post):

 <body> 
   
	<s:form action="upload" enctype="multipart/form-data">
		
		<s:file name="file"></s:file>
		<s:submit value="submit"></s:submit>
	
	</s:form>
  </body>

对应的UploadAction为:

package com.test.action;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

import com.opensymphony.xwork2.ActionSupport;

public class UploadAction extends ActionSupport
{
	private File file; // 对应真正上传的文件
	
	private String fileFileName; // 对应上传的文件名

	public File getFile()
	{
		return file;
	}

	public void setFile(File file)
	{
		this.file = file;
	}

	public String getFileFileName()
	{
		return fileFileName;
	}

	public void setFileFileName(String fileFileName)
	{
		this.fileFileName = fileFileName;
	}
	
	@Override
	public String execute() throws Exception
	{
		
		
		InputStream is = new FileInputStream(file);
		OutputStream os = new FileOutputStream("E:\Desktop\" + fileFileName);
		
		byte[] buffer = new byte[1024];
		int length = 0;
		
		while(-1 != (length = is.read(buffer)))
		{
			os.write(buffer, 0, length);
		}
		
		os.close();
		is.close();
		
		return SUCCESS;
	}
}

结果页面很简单uploadResult.jsp:

<body>
    Upload success~~
</body>

struts对应的配置为:

<action name="upload" class="com.test.action.UploadAction">
				<result name="success">/uploadResult.jsp</result>
</action>

web.xml一如既往从struts的部分开始就没变过:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  
  <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>

最后引入struts2中的第三方JAR包,在原有六个包的情况下,添加commons-io-1.3.2.jar,打开http://localhost:8080/struts2/upload.jsp,选择文件即可完成上传。

 

原文地址:https://www.cnblogs.com/Code-Rush/p/4669962.html