2016-02-02 13 views
9

NG-ファイルのアップロードと春に多くのファイルをアップロードしようとしたとき、私は一度に複数のファイルをアップロードするための次のコントローラメソッドを持っているだけでなくthis questionthis blog postと回答触発さ:空のリスト<MultipartFile>

@RequestMapping(value = "/{user}/attachment", method = RequestMethod.POST) 
@PreAuthorize(...) 
public void upload(@PathVariable User user, 
        @RequestParam("file") List<MultipartFile> files) { 
    // handle files 
} 

ただし、ファイルのリストには、要求は含まれていますが、常に空です。

私はメソッドの3番目のMultipartRequestのパラメータを追加した場合:

public void upload(@PathVariable User user, 
        @RequestParam("file") List<MultipartFile> files, 
        MultipartRequest request) 

を私はそれが正常にアップロードしたファイルが含まれて見ることができます:

request contents

List<MultipartFile>の理由かもしれませんか?

私はng-file-uploadを使用してファイルを送信していますが、問題と関連しているとは思われません。 Spring 4.2.4。

@RequestMapping(value = "/{user}/attachment", method = RequestMethod.POST) 
    @PreAuthorize(...) 
    public void upload(@PathVariable User user,@ModelAttribute("uploadFile") FileUpload uploadFile) throws IllegalStateException, IOException { 

    List<MultipartFile> files = uploadFile.getFiles(); 
    ... 

など、クラスを作成します:このよう@ModelAttributeを使用する

+0

あなたの設定は?マルチパートアップロードには、ライブラリと一致するリゾルバが必要です。 – zeroflagL

+0

* *ライブラリ*とは? – fracz

+0

あなたがあなたが参照していたブログ記事を読んだと思われました。 'commons-fileupload' – zeroflagL

答えて

14

問題は、デフォルトでng-file-upload名前file[0]file[1]などを使用してファイルの配列を提出Uploadサービスを使用する場合には、arrayKey値で設定可能であるということでした。それを空文字列に設定すると、ファイルは同じfileキーで強制的に送信されます。これはSpringで正しく解決され、@RequestParam("file") List<MultipartFile>には送信されたすべてのファイルが含まれます。

Upload.upload({url: url, data: {file: arrayOfFiles}, arrayKey: ''}) 
3

てみ

 public class FileUpload { 
    private List<MultipartFile> files; 
    public List<MultipartFile> getFiles() { 
     return files; 
    } 

    public void setFiles(List<MultipartFile> files) { 
     this.files= files; 
     } 
    } 
+0

しかし、私は一度に複数のファイルをアップロードしたいと思います。 – fracz

+0

@fracz更新された回答を参照してください – Abdelhak

0

を私はあなたが正面からデータを送信されるように、それはがでをバインドすることができないと思いますjava.util.List。あなたが要求としてJSONデータを作成し、@RequestBody等とのあなたのリストを注釈付きの場合:

@RequestMapping(value = "/{user}/attachment", method = RequestMethod.POST) 
@PreAuthorize(...) 
public void upload(@PathVariable User user, 
        @RequestBody List<MultipartFile> files) { 
    // handle files 
} 

これは動作するはずです。いくつかの情報here

+0

私のためにすぐには動作しませんでしたが、私はアプローチを好む。上の@franczメソッドを使用して終了しました。 – Spider

+0

@RequestBodyを使用して提案するソリューションは、リクエストの本文がバックエンドにあるドメインオブジェクトに直接変換されている場合、実際には正しいです。たとえば、本体をJSONデータからオブジェクトに解析するために使用できます。ただし、MultipartFileでは動作しません。 –