在變成過程中難免會遇到文件上傳和下載功能,比方說我們所做的系統中有些需要上傳附件文檔。對於這些,Struts2已經幫我們封裝好了,只需要按照一定規則來就可以。下面先來看看文件上傳功能:
一、單個文件上傳:
1、前臺: 1)上傳文件頁面(在這特別注意,上傳文件的form的enctype必須是multipart/form-data):upload.jsp
<form action="fileUpload.action" method="post" enctype="multipart/form-data">
username:<input type="text" name="username"><br>
file:<input type="file" name="file"><br>
<input type="submit" value="submit">
</form>
2)上傳後跳轉頁面:uploadResult.jsp
<body>
username:<s:property value="username" /><br>
name:<s:property value="fileFileName" /><br>
type:<s:property value="fileContentType" /><br>
</body>
2、對應的struts.xml文件中的Action(和平時配置的action是一個樣子的)
<struts>
<!-- 設置文件上傳臨時目錄和上傳文件的大小限制 -->
<constant name="struts.multipart.saveDir" value="/tmp"/>
<constant name="struts.multipart.maxSize" value="1048576000"/>
<package name="struts2" extends="struts-default">
<action name="fileUpload" class="com.tgb.struts2.UploadAction">
<result name="success">/fileUploadResult.jsp</result>
</action>
</package>
</struts>
3、Action類:UploadAction類
public class UploadAction extends ActionSupport {
private String username;
//Struts封裝好的,直接用下面的屬性即可.
private File file;
private String fileFileName;
private String fileContentType;
//get、set方法省略...
@Override
public String execute() throws Exception {
//獲取上傳文件的路徑
String root=ServletActionContext.getRequest().getRealPath("/upload");
//讀取文件內容
InputStream is=new FileInputStream(file);
//將內容寫到臨時文件destFile中
File destFile=new File(root, fileFileName);
//將文件寫到磁盤上
OutputStream os=new FileOutputStream(destFile);
byte[] buffer=new byte[400];
int length=0;
while (-1 !=(length=is.read(buffer))) {
os.write(buffer,0,length);
}
is.close();
os.close();
//跳轉到成功頁面
return SUCCESS;
}
}
上面講述的是單個文件的上傳,除此之外,如果遇到批量上傳的話,不必擔心,來一個循環就幫我們很好的解決了該問題,下面來看多個文件上傳的例子:
二、多個文件上傳
1、前臺:
1)fileUpload.jsp
<form action="fileUpload2.action" method="post" enctype="multipart/form-data">
username:<input type="text" name="username"><br>
file:<input type="file" name="file"><br>
file2:<input type="file" name="file"><br>
file3:<input type="file" name="file"><br>
<input type="submit" value="submit">
</form>
2)fileUploadResult.jsp
username:<s:property value="username"/> <br>
<s:iterator value="fileFileName" id="f">
<s:property value="#f"/><br>
</body>
2、對應的struts.xml文件中的Action
<struts>
<!-- 設置文件上傳臨時目錄和上傳文件的大小限制 -->
<constant name="struts.multipart.saveDir" value="/tmp"/>
<constant name="struts.multipart.maxSize" value="1048576000"/>
<package name="struts2" extends="struts-default">
<action name="fileUpload2" class="com.tgb.struts2.UploadAction2">
<result name="success">/fileUploadResult2.jsp</result>
</action>
</package>
</struts>
3、UploadAction類
public class UploadAction2 extends ActionSupport {
private String username;
private List<File> file;
private List<String> fileFileName;
private List<String> fileContentType;
//get、set方法省略...
@Override
public String execute() throws Exception {
for (int i = 0; i < file.size(); i++) {
String root=ServletActionContext.getRequest().getRealPath("/upload");
InputStream is=new FileInputStream(file.get(i));
File destFile=new File(root, fileFileName.get(i));
OutputStream os=new FileOutputStream(destFile);
byte[] buffer=new byte[400];
int length=0;
while (-1 !=(length=is.read(buffer))) {
os.write(buffer,0,length);
}
is.close();
os.close();
}
return SUCCESS;
}
}