杀千刀的Struts2文件上传

         笔者作为一个不认真的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的一个收获

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值