webwork 文件上传

这两天要做一个文件上传的功能,为了配合webwork,使用了它带的上传功能,因为对拦截器没有深入的研究,被这个功能折腾了2天才弄出来,想想实在觉得花费时间太多了,还是得抽空好好系统的学习一下它,不能每次都到用的时候再折腾,那是被它折腾。
为了这个功能,也在网上搜了很多,看到很多人也碰到了跟我同样的问题,但是都没有很详细的解决过程,自己也是在山穷水尽的时候忽然就配置对了,所以记下来,以悼念我那2天的时间。
环境
windowsxp,webwork2.2.6,IE6
目的
用webwork的fileUploadInterceptor实现文件上传功能
步骤
1、web页面upload.jsp的上传代码,很简单,主要为
<ww:form name="form1" action="upload.action" method="post" enctype="multipart/form-data">
<ww:file name="file" label="广告图片"/>
<ww:submit />
</ww:form>
2、java部分的action代码
public class DocUpload extends ActionSupport {
//upload file
private String fileContentType;
private String fileFileName;
private File file;
private User user;
public String uploadFile()
{
Map session=ActionContext.getContext().getSession();
if(session!=null)
user=(User)session.get("user");
upload();
System.out.println("caption="+fileFileName);
return SUCCESS;
}
//上传文件
private void upload()
{
if(file!=null)
{
FileOutputStream outputStream;
try {
ResourceBundle rb = ResourceBundle.getBundle("config");

String fileDir = rb.getString("saveDir")+user.getId()+File.separator;
String filePath=fileDir+fileFileName;
try{
//创建目录
File f=new File(fileDir);
f.mkdirs();
}catch(Exception e)
{
e.printStackTrace();
}
outputStream = new FileOutputStream(filePath);
FileInputStream fileIn = new FileInputStream(file);
byte[] buffer = new byte[1024];
int len;
while ((len = fileIn.read(buffer)) > 0)
{
outputStream.write(buffer, 0, len);
}
fileIn.close();
outputStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("uploadfile name="+fileFileName);
}
else
{
System.out.println("file is null!");
}
}

public String getFileContentType() {
return fileContentType;
}

public void setFileContentType(String contentType) {
this.fileContentType = contentType;
}

public File getFile() {
return file;
}

public void setFile(File file) {
this.file = file;
}

public String getFileFileName() {
return fileFileName;
}

public void setFileFileName(String fileName) {
this.fileFileName = fileName;
}
其中的三个变量,fileContentType是文件的类型,fileFileName是文件名,file是文件,这里,三个变量名的构成是有规则的,file可以任意命名,但是其他两个变量的命名规则是file+ContentType和file+FileName,或者如果命名这里不注意,则在变量的setter和getter那里就要注意了,一定要是getFileFileName和getFileContentType,当然,如果不需要文件的文件名和文件类型,这两个变量可以省去,也省下麻烦了。
另外,webwork上传文件只是暂时存放在一个文件夹等待action里处理,处理完毕就会删除临时文件,所以在action里一定要自行对文件进行处理,不能指望它自动保存,因此我在 upload()函数里保存了一次。
3、xwork.xml中的相关配置
<action name="upload" class="DocUpload" method="uploadFile">
<interceptor-ref name="fileUpload" />
<interceptor-ref name="defaultStack" />
<result name="success">/sys/uploadsuccess.jsp</result>
<result name="input">/sys/upload.jsp</result>
</action>
这里就是把我卡了2天的地方,主要是<interceptor-ref name="defaultStack" />这一项,本来我在xwork.xml最前面写了 <default-interceptor-ref name="completeStack"/>,以为这样应该都包含了,但是就是不行,到网上到处搜,人家说要设置<interceptor-ref name="fileUpload" />这个,写上了也不行,试了很多方法都不行,最后无意中把<interceptor-ref name="defaultStack" />这行添上就出来了。
4、webwork.properties的相关配置
webwork.multipart.parser=jakarta
#file upload temp save
webwork.multipart.saveDir=d:/temp
其中,webwork.multipart.parser是设置处理上传的类的,有cos jakarta pell 三种设置, jakarta是默认的设置;注意设置了相应的类要把相应的jar放进来;
webwork.multipart.saveDir是设置临时保存文件的文件夹;
5、config.properties用来设置上传图片的保存路径,不是webwork上传功能必须的配置
#windows
saveDir=D:/Tomcat 5.5/webapps/pxbn/upload/
#linux
#saveDir=/home/web/tomcat/webapps/pxbn/upload/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值