研究一下ByteArrayMultipartFileEditor,自定义一个fileinfo类,并为它实现一个PropertyEditor,很容易的。

解决方案 »

  1.   

    由于原来的那个新闻发布的代码中没有上传附件的功能,所以,我想添加上传附件的功能;
    但我不想把文件本身存放在数据库中,我自定义了一个文件上传的ArticleUpload类;原先对应的文章类是Article(这个是和数据库中的表相对应的);两者之间的差别就是前者有一个存放文件本身的成员变量private byte[] file;后者对应的是文件在服务器中的地址;在**-servlet中配置如下:
        <bean id="multipartResolver"
           class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
            <!-- set the max upload size100MB -->
            <property name="maxUploadSize">
                <value>104857600</value>
             </property>
             <property name="maxInMemorySize">
               <value>4096</value>
             </property>
         </bean>
     <bean id="urlMapping" 
      class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">        
        <property name="mappings">            
           <props>                
              <prop key="/admin/addarticle.shtml">addArticleFormController</prop>            
           </props>        
           </property>    
    </bean>
    <bean id="addArticleFormController" class="uestc.gr.web.admin.AddArticleFormController">
          <property name="commandClass"><value>ArticleUpload</value></property>       
          <property name="formView"><value>AddArticleForm</value></property>
          <property name="successView"><value>ArticleManagerFormRedirect</value></property>
       </bean>   在addArticleFormController控制器中,我添加了如下方法:
    protected void initBinder(HttpServletRequest request,
    ServletRequestDataBinder binder) throws ServletException {
    binder.registerCustomEditor(byte[].class,
    new ByteArrayMultipartFileEditor());
    }
    在onSubmit方法中:
    ArticleUpload articleUpload = (ArticleUpload) o;
    byte[] file = articleUpload.getFile();
    //然后做文件保存到磁盘上,以及将articleUpload的数据成员捣腾到Article对象中去,然后再将Article对象写入数据库;另外在原来的Article类中的tile,content等数据成员定义为String,在ArticleUpload类中是应该定义为String还是String[]?在前台jsp的form中添加了enctype="multipart/form-data"不知我这样的实现步骤那里有问题?请楼上的指教!头都搞大了,感觉spring中做有附件的文章发布真是麻烦,以前没有用mvc;直接编写javabean,用smartupload感觉方便得多!
      

  2.   

    public class ArticleUpload {
      private String title;
      private String content;
      private byte[] file;
    }就这样就行了,有什么麻烦的??在onSubmit方法里得到的command对象直接用,数据都给你填充好了。
      

  3.   

    to:Saro(这也不是江水,这是二十年流不尽的英雄血。) 
    文件上传的问题解决了,但是我现在有一个文件操作的问题:文件存放的路径我想用相对路径,如何找到相对与工程文件中的某一个目录?能否象类似dos中的../../../upload  的某种方式?
      

  4.   

    如何找到工程文件的实际物理路径?
    我想用:getServletContext().getRealPath("/"),但是运行的时候报错,