1.建立單一檔案上傳頁面(fileUpload.jsp):
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'fileUpload.jsp' starting page</title>
</head>
<body>
<font color="red"><s:actionerror/></font>
<font color="red"><s:fielderror/></font>
<form action="<%=path%>/fileUpload" method="post" enctype="multipart/form-data">
<table>
<tr>
<td>Title:</td>
<td><input type="text" name="title"></td>
</tr>
<tr>
<td>檔案名稱:</td>
<td><input type="file" name="upload"></td>
</tr>
<tr>
<td><input type="submit" value="上傳..."></td>
</tr>
</table>
</form>
</body>
</html>
2.建立上傳成功頁面(fileUpload_Success.jsp):
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'fileUpload_Success.jsp' starting page</title>
</head>
<body>
FileUpload ok!!<br>
Title:<s:property value="title"/><br>
FullFileName:<s:property value="uploadFileName"/><br>
FileContentType:<s:property value="uploadContentType"/><br>
RealPath(Save):<s:property value="savePath"/>
</body>
</html>
3.建立上傳Action(FileUploadAction.java):
package com.action.test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class FileUploadAction extends ActionSupport {
/**
*
*/
private static final long serialVersionUID = 1L;
private File upload;
private String uploadContentType;
private String uploadFileName;
private String title;
private String savePath;
private String targetDir;
public File getUpload() {
return upload;
}
public void setUpload(File upload) {
this.upload = upload;
}
public String getUploadContentType() {
return uploadContentType;
}
public void setUploadContentType(String uploadContentType) {
this.uploadContentType = uploadContentType;
}
public String getUploadFileName() {
return uploadFileName;
}
public void setUploadFileName(String uploadFileName) {
this.uploadFileName = uploadFileName;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getSavePath() {
this.savePath = ServletActionContext.getServletContext().getRealPath(getTargetDir());
return savePath;
}
public void setSavePath(String savePath) {
this.savePath = savePath;
}
public String getTargetDir() {
return targetDir;
}
public void setTargetDir(String targetDir) {
this.targetDir = targetDir;
}
@Override
public String execute() throws Exception {
return doUpload();
}
public String doUpload(){
if(upload==null){
this.addActionError("請選擇檔案!!");
return INPUT;
}
//String fileName = this.upload.getName();
String path = this.upload.getPath();
try {
FileInputStream in = new FileInputStream(path);
FileOutputStream os = new FileOutputStream(this.getSavePath()+"\\"+this.uploadFileName);
//System.out.println("os:"+path);
//System.out.println("in:"+fileName);
try {
byte[] b = new byte[1024];
int len=0;
while((len=in.read(b))>0){
os.write(b,0,len);
}
os.close();
in.close();
} catch (IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return SUCCESS;
}
}
4.於struts.xml(src目錄下)加入Struts2 Action:
<action name="fileUpload" class="com.test.action.fileUpload.FileUploadAction"> <result>fileUpload_Success.jsp</result> <result name="input">fileUpload.jsp</result> <param name="targetDir">\\upload</param> </action>
若需限制每次檔案最大可上傳之大小,可加入下面參數於struts.xml內:
<!-- 一次最大上傳之檔案大小 --> <constant name="struts.multipart.maxSize" value="10240000"></constant>
指定上傳之暫存檔之目錄,可加入下面參數於struts.xml內:
<!-- temp dir --> <constant name="struts.multipart.saveDir" value="C:\\Program Files (x86)\\Apache Software Foundation\\Tomcat 6.0\\webapps\\Demo\\upload"></constant>
5.測試結果:
http://localhost:8080/Demo/test/fileUpload.jsp


看到此畫面,恭喜您實作Struts2單一檔案上傳範例成功!
沒有留言:
張貼留言