單文件上傳
1.要使用html的表單上傳文件,必須把html表單的enctype屬性設置為multipart/form-data,
method必須設置為post。
2.使用File Upload攔截器來進行上傳文件的管理.這個攔截器有兩個屬性:
maximumSize---文件上傳的最大長度(單位是字節),默認值為2MB.
allowedTypes---文件上傳的類型限制,用逗號分隔.
e.g:
SingleUpload.jsp內容
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>SingleUpload</title>
</head>
<body>
<h1>單文件上傳</h1>
<s:fielderror />
<s:form action="singleUpload" enctype="multipart/form-data">
<s:file name="upload" label="選擇文件" />
<s:submit value="提交" />
</s:form>
</body>
</html>
Struts.xml文件內容
<package name="default" namespace="/" extends="struts-default">
<default-action-ref name="index" />
<action name="singleUpload" class="com.upload.action.SingleFileUpload" method="uploader">
<interceptor-ref name="fileUpload">
<!-- 限定大小 -->
<param name="maximumSize">100000</param>
<!-- 限定格式 -->
<param
name="allowedTypes">image/gif,image/jpeg,image/png,text/plain</param>
</interceptor-ref>
<!--使用struts2自帶的攔截器,basicStack切記要寫,否則文件不會上傳成功 -->
<interceptor-ref name="basicStack" />
<result>/SingleUpload.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>
SingleFileUpload.java內容
package com.upload.action;
import java.io.File;
import javax.servlet.ServletContext;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class SingleFileUpload extends ActionSupport {
private File upload;
private String uploadFileName;
private String uploadContentType;
/*省略getter、setter*/
public String uploader(){
System.out.println(uploadFileName);
ServletContext context=ServletActionContext.getServletContext();
if(upload!=null){
String dataDir = context.getRealPath("/uploads");
File savedFile = new File(dataDir,uploadFileName);
upload.renameTo(savedFile);
}
return SUCCESS;
}
}
多文件上傳
MultipleFileUpload.jsp內容
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>MultipleFileUpload</title>
</head>
<body>
<s:form action="multiple/multipleUpload" enctype="multipart-data" method="post">
<s:file name="upload" lable="文件1"/>
<s:file name="upload" lable="文件2"/>
<s:file name="upload" lable="文件3"/>
<s:submit value="提交" />
</s:form>
</body>
</html>
Struts.xml內容
<action name="multipleUpload" class="com.upload.action.MultipleFileUpload" method="uploader">
<interceptor-ref name="fileUpload">
<param name="maximumSize">102400</param>
<param
name="allowedTypes">image/gif,image/jpeg,image/png,text/plain
</param>
</interceptor-ref>
<interceptor-ref name="basicStack" />
<result>/index.jsp</result>
<result name="error">/index.jsp</result>
</action>
MultipleFileUpload.java內容
package com.upload.action;
import java.io.File;
import javax.servlet.ServletContext;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class MultipleFileUpload extends ActionSupport {
private File[] upload;
private String[] uploadFileName;
private String[] uploadContentType;
/*省略getter、setter*/
public String uploader() {
System.out.println(upload);
ServletContext context = ServletActionContext.getServletContext();
if (upload!=null) {
String dataDir = context.getRealPath("/uploads");
for(int i=0;i<upload.length;i++){
File savedFile = new File(dataDir, uploadFileName[i]);
upload[i].renameTo(savedFile);
}
}
return SUCCESS;
}
}
還可以用List來實現多文件的上傳,不過用數組比用List好,因為可以通過索引來對文件進行遍歷.