12

100 MB サイズのファイルがブラウザからアップロードされると、Spring はデータ全体をメモリに保持するか、ディスクに一時的に保存します。Spring doc を通過した後、一時ディレクトリを設定する方法を知っていますが、それについて言及しないとどうなるか知りたいです。

次の宣言があります:

<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>

豆 :

public class FileHolder {

    private MultipartFile file;

    public void setFile(MultipartFile file) {
        this.file = file;
    }

    public MultipartFile getFile() {
        return file;
    }
}

上記の Bean の「ファイル」オブジェクトは、その 100 MB のデータを保持しますか?

4

4 に答える 4

14

javadocをもう少し掘り下げると、デフォルトの最大メモリ内サイズが 10240 バイトであることがわかります。そのことから、10kB 未満のアップロードはメモリに保持され、それより大きいものはディスクに保存されると想定します。ディスクの場所を指定しない場合は、デフォルトが使用される可能性があります (システムのデフォルトの tmp ディレクトリが使用されると思います)。

于 2009-12-23T12:56:21.423 に答える
3

スプリング ブートでspring.servlet.multipart.file-size-threshold は、ファイルがディスクに書き込まれるサイズのしきい値を指定します。

プロパティのデフォルト値はゼロです。これは、デフォルトで、すべてのファイルを一時的な場所に保存することを意味します ( で設定できますspring.servlet.multipart.location)。

リンク:スプリング ブーツのプロパティ

ここの実装に関するいくつかのバグに注意してください: https://github.com/spring-projects/spring-boot/issues/9073

于 2018-12-24T13:39:44.637 に答える
2

一時ディレクトリを設定しない場合、CommonsMultipartResolverは一時ファイルをサーブレット コンテナの一時ディレクトリに保存します。

あなたの例の「ファイル」オブジェクトは、 java.io.File 参照と同様にデータを保持していません。でデータを取得する必要がありますfile.getBytes()

于 2009-12-23T16:29:43.060 に答える
2

はい。ただし、ディスクに保存されている場合は、リクエストが処理された後に削除されます。ディスクに保存するときのしきい値を設定できます。

multipartresolver Bean 定義では、たとえば次のようになります。

<property name="maxUploadSize" value="1000000" /> 
<property name="maxInMemorySize" value="1000" /> 

メモリに保持されている場合は、セッションに保存して、たとえばユーザーの確認を待っている場合など、次のリクエストで処理できます。

于 2009-12-23T16:43:10.443 に答える