<form action="fileupload.action" method="post" enctype ="multipart/form-data">
<input type="file" name="file"><br>
<input type="submit" value="submit">
</form>
jsp中的表单
package com.actions; import java.io.*; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class FileUploadActions extends ActionSupport { private static final int BUFFER_SIZE=16*1024; private File file; private String contentType; private String fileName; public File getFile() { return file; } public void setFile(File file) { this.file = file; } public void setFileContentType(String contentType) { this.contentType = contentType; } public void setFileFileName(String fileName) { this.fileName = fileName; } public String execute(){ File dstFile=new File(ServletActionContext.getServletContext().getRealPath("/upload"+"/"+fileName)); try { InputStream is=new BufferedInputStream(new FileInputStream(file),BUFFER_SIZE); OutputStream os=new BufferedOutputStream(new FileOutputStream(dstFile),BUFFER_SIZE); byte[] buffer=new byte[BUFFER_SIZE]; while(is.read(buffer)>0){ os.write(buffer); } is.close(); os.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return SUCCESS; } }
action代码
<action name="fileupload" class="com.actions.FileUploadActions"> <interceptor-ref name="fileUpload"> <param name="allowedTypes"> image/bmp,image/png,image/gif,image/jpeg </param> </interceptor-ref> <interceptor-ref name ="defaultStack" /> <result name="input">index.jsp</result> <result name="success">index.jsp</result> </action>
struts.xml中的代码
在上面的代码中我分别写了setFileContentType方法和setFileFileName方法,这两个方法并没有和页面上的任何代码绑定,其实表单file不但绑定了contentType(文件类型)和FileName(文件名)。