`

我的工程图片上传部分笔记(二)

阅读更多

三: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中处理文件的时候很有可能文件已被删掉,虽然这并非一定会出现,但毕竟不安全

// enctype="multipart/form-data"为文件上传必须的部分

         此标记告知浏览器需要发送以某种方式编码的HTTP请求,而在这种编码方式下,上传文件才能被处理,Webwork会自动识别这种类型的请求,然后将HttpServletRequest对象封装为一个特别的MultiPartRequestWrapper(在com.opensymphony.webwork.dispatcher.multipart包中),这个对象会从request的余下部分中把文件正确地解析出来,让你可以获得上传文件的临时java.io.File对象的句柄,以及文件的内容类型和初始文件名。
评论

相关推荐

Global site tag (gtag.js) - Google Analytics