三:webwork.properties
webwork.multipart.parser = com.opensymphony.webwork.dispatcher.multipart.PellMultiPartRequest
//指定文件上传到服务器中的一个临时目录
四:picNews.xwork.xml
<xwork>
<package name="picNews" namespace="/picNews" extends="jjyx-basic">
<interceptors>
<interceptor name="savePicNews" class="com.opensymphony.webwork.interceptor.FileUploadInterceptor">
<param name="allowedTypes">image/jpeg/jpg/bmpparam>
<param name="maximumSize">10000000param>
interceptor>
<interceptor name="updatePicNews" class="com.opensymphony.webwork.interceptor.FileUploadInterceptor">
<param name="allowedTypes">image/jpeg/jpg/bmpparam>
<param name="maximumSize">10000000param>
interceptor>
<interceptor-stack name="fileUploadStack">
<interceptor-ref name="upload"/>
<interceptor-ref name="defaultStack"/>
interceptor-stack>
<interceptor-stack name="loadStack">
<interceptor-ref name="upload"/>
<interceptor-ref name="defaultStack"/>
interceptor-stack>
interceptors>
<default-interceptor-ref name="fileUploadStack"/>
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
<action name="savePicNews" class="savePicNewsAction">
<result name="300.201" type="redirect">/picNews/listPicNews.ms?siteId=${siteId}result>
<interceptor-ref name="params"/>
<interceptor-ref name="basicStack"/>
<interceptor-ref name="fileUploadStack"/>
<interceptor-ref name="model-driven"/>
action>
<action name="updatePicNews" class="updatePicNewsAction">
<result name="300.202"
type="redirect">/picNews/listPicNews.ms?siteId=${siteId}result>
<interceptor-ref name="params"/>
<interceptor-ref name="basicStack"/>
<interceptor-ref name="loadStack"/>
<interceptor-ref name="model-driven"/>
action>
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
五:jsp部分
picArticleAdd.jsp
<body>
<form action="/picNews/savePicNews.ms? siteId=${siteId }"
method="post" enctype="multipart/form-data"
name="myform" onsubmit="return chkSubmit();">
// enctype="multipart/form-data"为文件上传必须的部分
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
<tr>
<td bgcolor="#F4F4F4" align="center"><p><strong>图片地址strong>p>td>
<td bgcolor="#F4F4F4" align="left"><input name="photoUrl" type="file" size="30" id="file1" onchange="test()">td>
tr>
<tr><td bgcolor="#F4F4F4" align="center"><strong>图片预览strong>td><td bgcolor="#F4F4F4" align="left">
<img id="showimg" width="${width }" height="${height}"/>td>
tr>
总结:
当程序进入到action中时,开始处理上面代码中的photoUrl,此时文件已上传到服务器中的一个临时目录(同时被注入到action中,就是你看到的photoUrl),此临时目录由webwork.properties指定,你必须将此文件拷贝到你需要的目录,否则action执行完毕,此文件会被删除,准确说是拦截器处理后删除了临时文件,这一段结论的前提是你使用拦截器处理上传
对于webwork.properties的一些处理,webwork in action上推荐使用webwork.multipart.parser=jakarta而不是默认的pell,如果使用前者,不要忘了在你的lib中加入commons-fileupload.jar
需要注意的问题:
在使用fileUpload拦截器的时候应该避免使用execAndWait拦截器,否则很有可能会出现空指针,因为execAndWait拦截器会在另一个线程处理action,而原来的线程会删掉临时文件,所以当你在action中处理文件的时候很有可能文件已被删掉,虽然这并非一定会出现,但毕竟不安全
此标记告知浏览器需要发送以某种方式编码的HTTP请求,而在这种编码方式下,上传文件才能被处理,Webwork会自动识别这种类型的请求,然后将HttpServletRequest对象封装为一个特别的MultiPartRequestWrapper(在com.opensymphony.webwork.dispatcher.multipart包中),这个对象会从request的余下部分中把文件正确地解析出来,让你可以获得上传文件的临时java.io.File对象的句柄,以及文件的内容类型和初始文件名。