2017-08-10 3 views
1

イメージファイルと共にデータを挿入しようとしています。イメージはデータに挿入されず、WEB-INF/resources/images内に挿入されます。送信ボタンをクリックすると何も挿入されません。springのjspからファイルを挿入するには?

<form class="form-horizontal" method="post" action="<c:url 
value="/admin/addProduct"/>" enctype = "multipart/form-data"> 
<div class="form-group"> 
    <label for="productCode" class="col-sm-2 control-label">Code</label> 
    <div class="col-sm-10"> 
     <input type="text" class="form-control" id="productCode" name="productCode" 
     placeholder="product code"> 
    </div> 
    </div> 

    <div class="form-group"> 
    <label for="productName" class="col-sm-2 control-label">Product Name</label> 
    <div class="col-sm-10"> 
     <input type="text" class="form-control" id="productName" name="productName" 
     placeholder="product name"> 
    </div> 
    </div> 
    <div class="form-group"> 
    <label for="productPrice" class="col-sm-2 control-label">Price</label> 
    <div class="col-sm-10"> 
     <input type="text" class="form-control" id="productPrice" name="price" 
     placeholder="product price"> 
    </div> 
    </div> 
    <div class="form-group"> 
    <label>Upload Image</label> 
     <div class="input-group"> 
      <span class="input-group-btn"> 
       <span class="btn btn-default btn-file"> 
        <input type="file" id="imgInp" name="prodImage"> 
       </span> 
      </span> 
     </div> 
    </div> 
    <div class="form-group"> 
    <div class="col-sm-offset-2 col-sm-10"> 
     <button type="submit" class="btn btn-default">Add Product</button> 
    </div> 
    </div> 
</form> 

ProductController

@RequestMapping(value="/admin/addProduct", method= RequestMethod.POST) 
    public String addNewProduct(@ModelAttribute("product") 
    Product products,BindingResult result,HttpServletRequest request) { 
    System.out.println("adding product"); 

    if(result.hasErrors()) { 
     return "addProduct"; 
    } 
    productService.saveProduct(products); 

    MultipartFile productImage = products.getImage(); 
    String rootDir = request.getSession().getServletContext().getRealPath("/"); 
    path = Paths.get(rootDir+"//WEB-INF//resources//images//"+products.getId()+".png"); 
    if(productImage != null && !productImage.isEmpty()) { 
     System.out.println("inside not null product image"); 
     try { 
     productImage.transferTo(new File(path.toString())); 
     }catch (Exception ex) { 
     ex.printStackTrace(); 
     throw new RuntimeException("product image saving failed",ex); 
     } 
    } 

    return "redirect:/admin/productInventory"; 
    } 

と私のpom.xmlのようになります - 私のポンポンがコモンズ・ファイルアップロード及びコモンズ-IOを含み

<project xmlns="http://maven.apache.org/POM/4.0.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
    http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.itn</groupId> 
    <artifactId>ecommerce</artifactId> 
    <packaging>war</packaging> 
    <version>0.0.1-SNAPSHOT</version> 
    <name>ecommerce Maven Webapp</name> 
    <url>http://maven.apache.org</url> 
    <dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>3.8.1</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-core</artifactId> 
     <version>4.3.8.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-web</artifactId> 
     <version>4.3.8.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-webmvc</artifactId> 
     <version>4.3.8.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>mysql</groupId> 
     <artifactId>mysql-connector-java</artifactId> 
     <version>6.0.6</version> 
    </dependency> 
    <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core --> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-core</artifactId> 
     <version>5.2.10.Final</version> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-tx</artifactId> 
     <version>4.3.8.RELEASE</version> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-orm</artifactId> 
     <version>4.3.8.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>javax.servlet-api</artifactId> 
     <version>3.1.0</version> 
     <scope>provided</scope> 
    </dependency> 
    <!-- https://mvnrepository.com/artifact/jstl/jstl --> 
    <dependency> 
     <groupId>jstl</groupId> 
     <artifactId>jstl</artifactId> 
     <version>1.2</version> 
    </dependency> 
    <dependency> 
     <groupId>commons-fileupload</groupId> 
     <artifactId>commons-fileupload</artifactId> 
     <version>1.3.2</version> 
    </dependency> 

    <dependency> 
     <groupId>commons-io</groupId> 
     <artifactId>commons-io</artifactId> 
     <version>2.5</version> 
    </dependency> 

     <dependency> 
      <groupId>taglibs</groupId> 
      <artifactId>standard</artifactId> 
      <version>1.1.2</version> 
     </dependency> 

    </dependencies> 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <version>3.5.1</version> 
     <configuration> 
      <source>1.8</source> 
      <target>1.8</target> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 
</project> 

applicationContext.xmlを

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans.xsd"> 

    <bean class="org.springframework.beans.factory.config. 
     PropertyPlaceholderConfigurer"> 
     <property name="location"> 
      <value>/WEB-INF/db.properties</value> 
     </property> 
    </bean> 
    <bean id="sessionFactory" class="org.springframework.orm.hibernate5. 
     LocalSessionFactoryBean"> 
     <property name="dataSource" ref="dataSource"></property> 
     <property name="hibernateProperties"> 
      <props> 
       <prop key="hibernate.dialect">org.hibernate.dialect. 
        MySQL5Dialect</prop> 
       <prop key="hibernate.hbm2ddl.auto">update</prop> 
       <prop key="hibernate.show_sql">true</prop> 
       <prop key="hibernate.format_sql">true</prop> 
      </props> 
     </property> 
     <property name="packagesToScan"> 
      <list> 
       <value>com.itn</value> 
      </list> 
     </property> 
    </bean> 
    <bean id="transactionManager" class="org.springframework.orm.hibernate5. 
     HibernateTransactionManager"> 
     <property name="sessionFactory" ref="sessionFactory"/> 
    </bean> 
    <bean id="dataSource" class="org.springframework.jdbc.datasource. 
     DriverManagerDataSource"> 
     <property name="driverClassName" value="${jdbc.driver}"></property> 
     <property name="url" value="${jdbc.url}"></property> 
     <property name="username" value="${jdbc.username}"/> 
     <property name="password" value="${jdbc.password}"/> 
    </bean> 
    <bean id="multipartResolver" class="org.springframework.web.multipart. 
     commons.CommonsMultipartResolver"> 
     <property name="maxUploadSize" value="1024000" /> 
    </bean> 
</beans> 

私はenctype = "multipart/form-data"を無視したとき、私は成功した(ファイルなし)フォームデータを挿入することができますが、私がデバッグモードでフォームや実行でマルチパートを含めたときに何も表示されません。私はここで何が欠けていますか?

+0

「ファイルを挿入する」と言ったら、「ファイルをアップロードする」ということでしょうか? –

+0

設定を表示します。これは関連している可能性があります:https://stackoverflow.com/questions/17773777/spring-file-upload-not-binding-to-model-attribute-object –

+0

DispatcherServletの初期化の実装がありますか?ほとんどのアプリケーションは通常、 MyApplicationWebInitialiser '? @sagar limbu – Vishal

答えて

0

たぶん、あなたはマルチパートリゾルバアップ配線する必要があります:あなたはバージョンのサーブレットを使用している場合は、サーブレットの起動時にMultipartConfigElementを追加する必要があり、this春のチュートリアルを1として

@Bean(name = "multipartResolver") 
public CommonsMultipartResolver createMultipartResolver() { 
    CommonsMultipartResolver resolver=new CommonsMultipartResolver(); 
    resolver.setDefaultEncoding("utf-8"); 
    resolver.setMaxUploadSize(1000000); 
    return resolver; 
} 
0

を> 3.0(これはIあなたはpom.xmlのものです)。

3.サーブレット3.0」のスプリングチュートリアルの添付リンクを参照してください。

MultipartConfigElement multipartConfigElement = new MultipartConfigElement(TMP_FOLDER, 
     MAX_UPLOAD_SIZE, MAX_UPLOAD_SIZE * 2, MAX_UPLOAD_SIZE/2); 

あなたのディスパッチャサーブレット初期化子に上記追加した後、あなたはあなたのアプリケーションの設定でStandardServletMultipartResolverのBeanを追加する必要があります。

@Bean 
public StandardServletMultipartResolver multipartResolver() { 
    return new StandardServletMultipartResolver(); 
} 
関連する問題