struts2文件上传

上面是jsp页面的form表单,该表单用的是struts2的标签。这里需要注意的是   method="post" enctype="multipart/form-data"  注意不要写错


下面看上传文件对应的action类:


public class UploadAction extends ActionSupport {

	
	private File <span style="color:#ff0000;">ppt</span>;//该属性对应表单 <span style="font-family: Arial, Helvetica, sans-serif;"><s:file name="<span style="color:#ff0000;">ppt</span>" label="Ppt"></s:file>的name属性</span>
	private String <span style="color:#ff0000;">ppt</span><span style="color:#000099;">ContentType</span>;
	private String <span style="color:#ff0000;">ppt</span><span style="color:#3333ff;">FileName</span>;
	private String pptDesc;
	/*
<span style="white-space:pre">		</span>属性  ppt、pptContentType、pptFileName 这三个属性是必须的而且其名字的命名方式是一定的,即:file,fileContentType,fileFileName的形式
<span style="white-space:pre">	</span>*/
	@Override
	public String execute() throws Exception {
		
		
		
		ServletContext servletContext = ServletActionContext.getServletContext();
			System.out.println(ppt);
			System.out.println(pptContentType);
			System.out.println(pptDesc);
			System.out.println(pptFileName);
			String dir = servletContext.getRealPath("/files/"+pptFileName);
			System.out.println(dir);
			FileOutputStream fos = new FileOutputStream(dir);
			FileInputStream fis = new FileInputStream(ppt);
			byte []buffer = new byte[1024];
			int len = 0;
			while((len = fis.read(buffer)) != -1){
				fos.write(buffer, 0, len);
			}
			fis.close();
			fos.close();
		}
		
		return success;
	}

	//属性对应的getter和setter方法省略

}

上面的例子只是上传单个文件,下面看看同时上传多个文件的例子


下面是jsp文件的form表单

<span style="white-space:pre">	</span><s:form action="testUpload" method="post" enctype="multipart/form-data">
		<s:file<span style="color:#ff0000;"> name="ppt"</span> label="Ppt"></s:file>
		<s:textfield name="<span style="background-color: rgb(255, 255, 255);"><span style="color:#ff0000;">pptDesc[0]</span></span>" label="pptDesc"></s:textfield>
		<s:file <span style="color:#ff0000;">name="ppt"</span> label="Ppt"></s:file>
		<s:textfield name="<span style="color:#ff0000;">pptDesc[1]</span>" label="pptDesc"></s:textfield>
		<s:file <span style="color:#ff0000;">name="ppt"</span> label="Ppt"></s:file>
		<s:textfield name="<span style="color:#ff0000;">pptDesc[2]</span>" label="pptDesc"></s:textfield>
		<s:submit></s:submit>
	</s:form>

jsp文件需要注意的就是标红的地方name的属性值必须一致。

下面看看action类:

package com.mxf.action;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.List;

import javax.servlet.ServletContext;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class UploadAction extends ActionSupport {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	private List<File> ppt;
	private List<String> pptContentType;
	private List<String> pptFileName;
	private List<String> pptDesc;
	
	@Override
	public String execute() throws Exception {
		
		
		
		ServletContext servletContext = ServletActionContext.getServletContext();
		for(int i=0;i<ppt.size();i++){
			System.out.println(ppt.get(i));
			System.out.println(pptContentType.get(i));
			System.out.println(pptDesc.get(i));
			System.out.println(pptFileName.get(i));
			String dir = servletContext.getRealPath("/files/"+pptFileName.get(i));
			System.out.println(dir);
			FileOutputStream fos = new FileOutputStream(dir);
			FileInputStream fis = new FileInputStream(ppt.get(i));
			byte []buffer = new byte[1024];
			int len = 0;
			while((len = fis.read(buffer)) != -1){
				fos.write(buffer, 0, len);
			}
			fis.close();
			fos.close();
		}
		
		return success;
	}

	public List<File> getPpt() {
		return ppt;
	}

	public void setPpt(List<File> ppt) {
		this.ppt = ppt;
	}

	public List<String> getPptContentType() {
		return pptContentType;
	}

	public void setPptContentType(List<String> pptContentType) {
		this.pptContentType = pptContentType;
	}

	public List<String> getPptFileName() {
		return pptFileName;
	}

	public void setPptFileName(List<String> pptFileName) {
		this.pptFileName = pptFileName;
	}

	public List<String> getPptDesc() {
		return pptDesc;
	}

	public void setPptDesc(List<String> pptDesc) {
		this.pptDesc = pptDesc;
	}

}

因为同时上传多个文件,所以这里接收文件action的属性用的是list集合,同时在处理文件的时候加一个for循环就可以了。

如果上传成功后需要回显的时候,因为file文件默认不显示其路径,故不需要特别注意什么,不过在其信息一栏可以利用struts2的OGNL来回显具体细节信息。具体看下面的图片。第一个是上传时的界面,第二个是没有在<s:textfield name="pptDesc" label="pptDesc"></s:textfield>的name属性里面加 pptDesc[0],第三个即

<s:textfield name="pptDesc[0]" label="pptDesc"></s:textfield>加了pptDesc[0]后的回显。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值