解释:
(!) 非注解情况下, SET 和get 方法是一定要要的。 否则,
private String fileFileName; //名字规则 页面name+ FileName
private String fileContentType; //同上
会出现 null值。
(2) 如果上传过程中出现乱码,在配置文件配置可行。 使用 request.setCharacterEncoding(“gbk"); 同理。
package com.cardinfolink.servlet;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import sun.awt.AppContext;
public class batchAction {
private String page;
public String getPage() {
return page;
}
public void setPage(String page) {
this.page = page;
}
//从前端页面获取的 File 对象
private File file;
//从前端获取的File Name
private String fileFileName;
//从前端获取的File类型
private String fileContentType;
//属性封装域
public File getFile() {
return file;
}
public void setFile(File file) {
this.file = file;
}
public String getFileFileName() {
return fileFileName;
}
public void setFileFileName(String fileFileName) {
this.fileFileName = fileFileName;
}
public String getFileContentType() {
return fileContentType;
}
public void setFileContentType(String fileContentType) {
this.fileContentType = fileContentType;
}
// Action 核心处理器
public String upFileAction() throws Exception
{
System.out.println(file);
System.out.println(this.fileContentType);
System.out.println(this.fileFileName);
//输出流
FileOutputStream fos = null;
//输入流
FileInputStream fis = null;
try { // 建立文件输出流
fos = new FileOutputStream("D:/Report/"+this.fileFileName);
// 建立文件上传流
fis = new FileInputStream(file);
//最大10MB
byte[] buffer = new byte[1024*1204*10];
//开始读写文件
int len = 0;
while ((len = fis.read(buffer)) > 0)
{
fos.write(buffer, 0, len);
}
}
catch (Exception e)
{
System.out.println("文件上传失败");
e.printStackTrace();
}
finally
{
close(fos, fis);
}
this.page="fail.jsp";
return "S";
}
//关闭流
private void close(FileOutputStream fos,FileInputStream fis)
{
if (fis != null)
{
try {
fis.close();
}
catch
(IOException e)
{
System.out.println("FileInputStream关闭失败");
e.printStackTrace();
}
}
if (fos != null)
{
try {
fos.close();
}
catch (IOException e)
{
System.out.println("FileOutputStream关闭失败");
e.printStackTrace();
}
}
}
}
//配置文件
<struts>
<constant name="struts.ui.theme" value="simple"></constant>
<!- 解决文件上传过程产生乱码-!>
<constant name="struts.i18n.encoding" value="gbk"></constant>
<action name="batchAction" class="com.cardinfolink.servlet.batchAction">
<result name="S">view/${page}</result>
</action>
</package>
</struts>
// 页面
<input type="file" id="file" name="file"/><span style="color: red; font-size: 12px;">(*文件状态必须是xls格式)</span></p>
<div id="form1"></div>
<p><a class="a" href="javascript:CreateEt();"><img src="image/add21.gif" width="15"/>添加一个文件</a></p>
<p><input id="submit" type="submit" class="btn btn-green" value="确认文件并上传"/></p>