笔者作为一个不认真的java自学者,今天学习了Struts2的文件上传功能,由于粗心以及其他种种原因,文件上传功能折腾了一上午!在中午愤然摔机器睡觉之后,又折腾了一番,最终终于被我折腾出来了。现在把自己所学以及掉进去的坑和大家分享一下,以期为和我一样的初学者提供参考。
Struts2的 fileUpload 说实话是一个非常方便的功能,避免了使用smartLoad等插件的繁琐。闲话不表,下面上代码:
首先,各种库的支持,下面是我封装的struts2核心库:
第二、配置web.xml 以及strust.xml,如下:
关于Struts.xml的配置值得注意的是里面文件上传大小的设置:
而且这里我用的是通配符的方式完成了关于Action与view的关联关系,节省了灰常多的代码。
下面是Action:
package cn.cc.modelDriver;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import com.opensymphony.xwork2.ActionSupport;
@SuppressWarnings("serial")
public class UploadAction extends ActionSupport {
private File file;
private String fileName;
private String type;
public void setFileFileName(String fileName){
this.fileName=fileName;
}
public File getFile() {
return file;
}
public void setFile(File file) {
this.file = file;
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String input(){
return SUCCESS;
}
@Override
public String execute() throws Exception {
copy();
return SUCCESS;
}
public void copy() throws IOException{
String path = "D:/test";
FileOutputStream fos=null;
FileInputStream fis =null;
try {
fos = new FileOutputStream(path+"/"+getFileName());
fis = new FileInputStream(getFile());
byte[] bytes = new byte[1024];
int len = 0;
while((len=fis.read(bytes))>0){
fos.write(bytes, 0, len);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(fis!=null){
fis.close();
}
if(fos!=null){
fos.close();
}
}
}
}
请注意这里有一个非常诡异的set方法:
就是这个方法才是文件名是否能获取的关键,就是设置了一个 文件属性+文件名属性的一个set方法,才能把你读到的源文件的名称获取下来。之前没设的时候一直报空指针异常,设了之后就很容易的取到了。以上就是这个fuckingday的一个收获