2009-12-23 38 views
7

Khi tệp có kích thước 100 MB được tải lên từ trình duyệt, Spring sẽ lưu toàn bộ dữ liệu trong bộ nhớ hoặc lưu trữ tạm thời trên đĩa. Sau khi đi qua Spring doc tôi biết cách thiết lập một thư mục tạm thời nhưng tôi muốn biết điều gì sẽ xảy ra nếu tôi không đề cập đến điều đó.Spring có giữ nội dung trong bộ nhớ hoặc lưu trữ trong đĩa không?

Am có khai báo như sau:

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

Bean:

public class FileHolder { 

    private MultipartFile file; 

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

    public MultipartFile getFile() { 
     return file; 
    } 
} 

sẽ là "tập tin" đối tượng trong đậu trên cho rằng 100 MB dữ liệu?

Trả lời

10

Đào sâu hơn một chút trong javadoc cho thấy kích thước bộ nhớ trong tối đa mặc định là 10240 byte. Từ đó tôi giả định rằng bất kỳ tải lên nhỏ hơn 10kB được giữ trong bộ nhớ, bất cứ thứ gì lớn hơn sẽ được lưu trữ trên đĩa. Nếu bạn không chỉ định vị trí đĩa, nó có thể sẽ sử dụng mặc định (tôi đoán nó sẽ sử dụng thư mục tmp mặc định của hệ thống).

2

Nếu bạn không đặt thư mục tạm thời CommonsMultipartResolver sẽ lưu tệp tạm thời vào thư mục tạm thời của thùng chứa servlet.

Đối tượng "tệp" trong ví dụ của bạn không giữ dữ liệu giống như tham chiếu java.io.File. Bạn cần lấy dữ liệu với file.getBytes().

2

Có, nhưng nếu nó được lưu trữ trên đĩa, nó sẽ bị xóa sau khi yêu cầu được xử lý. Bạn có thể thiết lập các ngưỡng khi nó sẽ được lưu trữ trên đĩa:

Trong định nghĩa bean multipartresolver của bạn, ví dụ:

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

Nếu nó giữ trong bộ nhớ, bạn có thể lưu nó trong phiên giao dịch và xử lý nó trong yêu cầu tiếp theo, chẳng hạn như nếu bạn đang chờ xác nhận người dùng.

Các vấn đề liên quan