2016-04-27 31 views
0

spring mvc 4、spring bootとthymeleafをテンプレートエンジンとして使用して複数のファイルをアップロードしようとしていますが、アップロードされたファイルにアクセスできません。コンテンツタイプapplication/octet-streamを持つ1つのマルチパートファイルとして扱われます。ここに私のフロントエンドのコードは次のとおりです。html5複数のファイルをspring mvc 4とspring bootでアップロードする

<form name="offer-form" th:action="@{/submit-property}" method="POST" enctype="multipart/form-data"> 

    <!-- .. other inputs .. --> 

     <div class="col-xs-12 margin-top-60"> 
      <input id="file-upload"name="files[]" type="file" multiple="multiple"/> 
     </div> 
     <div class="col-xs-12"> 
      <div class="center-button-cont margin-top-60"> 
       <button type="submit" class="button-primary button-shadow"> 
        <span>submit property</span> 
        <div class="button-triangle"></div> 
        <div class="button-triangle2"></div> 
        <div class="button-icon"><i class="fa fa-lg fa-home"></i></div> 
       </button> 
      </div> 
     </div> 
    </form> 

とコントローラコード:

import java.io.File; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 

import org.apache.tomcat.util.http.fileupload.IOUtils; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.core.io.FileSystemResource; 
import org.springframework.core.io.Resource; 
import org.springframework.stereotype.Controller; 
import org.springframework.ui.Model; 
import org.springframework.web.bind.annotation.ModelAttribute; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.bind.annotation.RequestParam; 
import org.springframework.web.multipart.MultipartFile; 

import com.aq.domain.Property; 
import com.aq.service.AddPropertyFormDataInitializerService; 

@Controller 
public class PorpertySubmissionController 
{ 
    public static final Resource PICTURES_DIR = new FileSystemResource("./uploadedPictures"); 

    //some unrelated code 

    @RequestMapping(value="/submit-property", method=RequestMethod.GET) 
    public String getSubmitPropertyForm(Model model) 
    { 
     model.addAttribute("property", new Property()); 

     return "submit-property"; 
    } 

    @RequestMapping(value="/submit-property", method=RequestMethod.POST) 
    public String submitProperty 
    (
      @ModelAttribute(value="property") Property property, 
      @RequestParam("files[]") MultipartFile[] uploadedImages 
    ) 
    { 
     //some unrelated code 

     if(uploadedImages != null && uploadedImages.length > 0) 
      { 
       System.out.println("uploadedImages length: " + uploadedImages.length); 
       for(MultipartFile imageFile : uploadedImages) 
       { 
        try 
        { 
         copyFileToPictures(imageFile); 
         System.out.println("copied File: " + imageFile.getOriginalFilename() + " successfully."); 
        } 
        catch (IOException e) 
        { 
         System.err.println(e.getMessage()); 
         e.printStackTrace(); 
        } 
       } 
      } 
      else 
      { 
       System.out.println("no images were uploaded"); 
      } 

     return "redirect:/submit-property"; 
    } 

    private Resource copyFileToPictures(MultipartFile file) throws IOException { 
     System.out.println("File Original Name: " + file.getOriginalFilename()); 
     System.out.println("File Name: " + file.getName()); 
     System.out.println("File size: " + file.getSize()); 
     System.out.println("File Content type: " + file.getContentType()); 

     String fileExtension = getFileExtension(file.getOriginalFilename()); 

     File tempFile = File.createTempFile("pic", fileExtension, PICTURES_DIR.getFile()); 
     try (InputStream in = file.getInputStream(); 
       OutputStream out = new FileOutputStream(tempFile)) { 
      IOUtils.copy(in, out); 
     } 
     return new FileSystemResource(tempFile); 
    } 

    private static String getFileExtension(String name) { 
     return name.substring(name.lastIndexOf(".")); 
    } 
} 

SYSOUTの出力:

uploadedImages長:1(私は複数のファイルをアップロードしていても)

ファイル名(getOriginalFileNameを使用):

ファイル名(getNam E):ファイル[]

ファイルサイズ:0

ファイルコンテンツの種類:アプリケーション/ octet-streamの

と空の元のファイル名で呼ばれているsubsctring例外。

私は誰かが直面している念のために私のPOMおよび設定CommonsMultipartResolver Beanにコモンズのファイルのアップロードを追加しようとしましたが、それは常に(それがnullまたは長さ= 0だことを意味する)は、アップロードした画像がないことを表示します

答えて

0

同じ問題では、それは春や胸焼けとは関係がないことが判明しました。これは単に、私が使用しているテーマがブートストラップのfileinputプラグインを使用しているからです。これはajaxとフォーム提出という2つのモードで動作します。テーマがファイルのアップロードで使用するほとんどの機能はフォーム送信モードでは利用できないことが判明しました。だからサードパーティのlib問題ですが、私は共有するべきだと思いました。

関連する問題