web 开发基于 struts2 相当方便,且也可轻松实现 FileUpload 功能,这里演示了 struts2 在多文件 form 情况下的上载操作
struts.xml action 定义
<action name="doUploadMultfile" class="cn.upload1.UploadAction" method="Upload">
<result name="success" type="json">
<param name="root">ActionResult</param>
</result>
</action>
jquery ajax 支持
<script type="text/javascript" src="script/jquery.min.js"></script>
<script type="text/javascript" src="script/jquery.form.js"></script>
jsp 上载文件的 form
<s:form id="uploadExce2" action="doUploadMultfile" method="POST" enctype="multipart/form-data">
<s:file label="File (1)" name="upload" />
<s:file label="File (2)" name="upload" />
<s:file label="FIle (3)" name="upload" />
<s:submit cssClass="btn btn-primary" />
</s:form>
<script type="text/javascript">
$('#uploadExce2').ajaxForm({
dataType : 'json',
success : function(data)
{
// alert(data);
},
error : function(data)
{
alert('error');
}
});
</script>
注意 file 控件的名字 uload,这是 struts2 的约定名,不能改变。
struts2 uploadfile
package cn.test.upload1;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import javax.servlet.ServletContext;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import cn.sharcom.config.ChiliLogin;
import cn.sharcom.config.ChiliProduct;
import cn.sharcom.config.Constant;
public class UploadAction
{
private File[] uploads;
private String[] uploadFileNames;
private String[] uploadContentTypes;
private String strActionResult;
public UploadAction()
{
}
public File[] getUpload()
{
return this.uploads;
}
public void setUpload(File[] upload)
{
this.uploads = upload;
}
public String[] getUploadFileName()
{
return this.uploadFileNames;
}
public void setUploadFileName(String[] uploadFileName)
{
this.uploadFileNames = uploadFileName;
}
public String[] getUploadContentType()
{
return this.uploadContentTypes;
}
public void setUploadContentType(String[] uploadContentType)
{
this.uploadContentTypes = uploadContentType;
}
public String Upload()
{
ActionContext ac = ActionContext.getContext();
ServletContext sc = (ServletContext) ac.get(ServletActionContext.SERVLET_CONTEXT);
// 取一个存文件的目录
String realpath = sc.getRealPath("/");
// 获得实际上载文件数量
int length = uploads.length;
// 遍歷所有上載的文件
for (int i = 0; i < length; i++)
{
// 文件寫磁盤
try
{
// 新文件名
String strFileName = NewFilename(i);
File savefile = new File(new File(realpath), strFileName);
// 写入
FileUtils.copyFile(uploads[i], savefile);
}
catch (IOException e)
{
e.printStackTrace();
}
}
return Action.SUCCESS;
}
/**
* 向 form 返回 action 結果
*
* @return
*/
public String getActionResult()
{
return strActionResult;
}
/**
* 構建一個新的文件名
*
* @return
*/
private String NewFilename(int index)
{
String strResult = null;
UUID uuid = UUID.randomUUID();
String str1 = uuid.toString();
String prefix = uploadFileNames[index].substring(uploadFileNames[index].lastIndexOf("."));
strResult = str1 + prefix;
return strResult;
}
/**
* 將文件轉化爲 Base64
*
* @param strFilename
* @return
*/
private String ApacheBase64FileToString(final String strFilename)
{
String strResult = null;
try
{
// 打开文件
File file = new File(strFilename);
// 得到文件 byte
byte[] byteFile = org.apache.commons.io.FileUtils.readFileToByteArray(file);
// 开始 base64
Base64 base64 = new Base64();
// 得到 base64 byte
byte[] byteText = base64.encode(byteFile);
// 转存 string
strResult = new String(byteText);
// StringToFile("c:/base64_2.txt", strResult);
// 设置返回
}
catch (IOException e)
{
e.printStackTrace();
}
return strResult;
}
}
文本连接 blog.youkuaiyun.com/joyous/article/details/51103064
参考资料 https://struts.apache.org/docs/file-upload.html
Q群讨论 236201801