接上篇博客,已经实现读取Excel到数据库,但是我忽略了那时服务器端本地操作,应该需要用户上传Excel表的,这篇写下struts2的上传操作用到commons-fileupload-1.2.jar和commons-io-1.3.jar可以到网上下载,struts.xml省略了就 只要action类正确就行。
下面试jsp表单:
<form action="XXXXX.action" method="POST" enctype="multipart/form-data">
选择文件:<input type="file"name="upload" size="30"/><br/>
<input type="submit"value=" 上传 "/>
</form>
其中"multipart/form-data"很重要表明是以二进制流数据传送
下面试action类的方法:
private static final int BUFFER_SIZE = 16 * 1024;
// 上传文件域对象
private File upload;
// 上传文件名 在操作类中需要此文件名找到需要导入数据库德Excel,因此需要对本类以来注入
public String uploadFileName;
// 上传文件类型
private String uploadContentType;
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 static int getBUFFER_SIZE() {
return BUFFER_SIZE;
}
public String getUploadFileName() {
return uploadFileName;
}
public void setUploadFileName(String uploadFileName) {
this.uploadFileName = uploadFileName;
}
public StringgetUpLoadFileName(){
return uploadFileName;
}
//自己封装的一个把源文件对象复制成目标文件对象
public void copy(File src, File dst) {
InputStream in = null;
OutputStream out = null;
try {
in = new BufferedInputStream(newFileInputStream(src), BUFFER_SIZE);
out = new BufferedOutputStream(newFileOutputStream(dst),
BUFFER_SIZE);
byte[] buffer = new byte[BUFFER_SIZE];
int len = 0;
while ((len = in.read(buffer)) > 0) {
out.write(buffer, 0, len);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (null != in) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (null != out) {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
@Override
public String execute() throws Exception {
//根据服务器的文件保存地址和原文件名创建目录文件全路径
String savePath ="E:/upload/"+this.getUploadFileName();//其中"E:/upload/"是上传文件在服务器的目录,提前创建好
File saveFile = new File(savePath);
System.out.println("上传文件名:"+uploadFileName);
copy(this.upload, saveFile);
return SUCCESS;
}