以前用servlet就没怎么熟悉文件上传,今天用struts2写了下,因为IO遇到了各种小问题。
文件上传,我现在知道的方式就是依靠commons-fileupload和commons-io这两个组件。这是给我们封装好了的方法。要想实现文件上传,首先需要在工程中导入这两个jar包。文件上传过程中,从浏览器传送到服务器的只是一份临时文件,所以还需要用到IO的相关知识,将临时文件拷贝到一份新文件中去。
相比于用servlet做文件上传,struts2的分装更彻底,只需要写很少的代码,以下是一个最简单的单文件上传demo,更复杂的多文件上传,文件断点续传后面再完善:
public String execute() throws Exception {
/*
*
*/
// TODO Auto-generated method stub
//获取上传的文件流
FileInputStream fis = new FileInputStream(getUpload());
//获取文件在服务器中的保存路径
String savePaht = request.getSession().getServletContext().getRealPath("/upload");
File file = new File(savePaht);
//判断文件是否存在
if(!file.exists() && !file.isDirectory()){
file.mkdir();
}
//在该路径下创建文件
FileOutputStream fos = new FileOutputStream(savePaht+"\\"+getUploadFileName());
//文件读写
byte [] buffer = new byte [1024];
int len = 0;
while((len = fis.read(buffer))>0){
fos.write(buffer);
//刷新流
fos.flush();
}
//关闭流
fos.close();
fis.close();
return "success";
}
在其中我遇到的最主要的问题是,没有在服务器路径下面创建文件,再进行与临时文件的拷贝操作。所以导致开始各种错误。