2012-07-11 34 views

Trả lời

5

dữ liệu được lưu trữ ở đâu?

Tôi không nghĩ rằng nó được lưu trữ. API phát trực tuyến không sử dụng DiskFileItemFactory. Nhưng nó sử dụng một bộ đệm để sao chép dữ liệu như BalusC đã đăng. Một khi bạn có con suối đã được upload xong, bạn có thể sử dụng

long bytesCopied = Streams.copy(yourInputStream, yourOutputStream, true); 

Nhìn vào API

3

Đây là javadoc cho DiskFileItemFactory.

Triển khai FileItemFactory mặc định. Việc triển khai này tạo ra các cá thể FileItem giữ nội dung của chúng trong bộ nhớ, cho các mục nhỏ hơn hoặc trong một tệp tạm thời trên đĩa, cho các mục lớn hơn. Ngưỡng kích thước, phía trên nội dung sẽ được lưu trữ trên đĩa, là có thể định cấu hình, cũng như thư mục trong đó các tệp tạm thời sẽ được tạo .

Nếu không bằng cách khác cấu hình, giá trị cấu hình mặc định như sau:

Size threshold is 10KB. 
Repository is the system default temp directory, as returned by System.getProperty("java.io.tmpdir"). 

file tạm thời, mà được tạo ra cho các hạng mục tập tin, nên bị xóa sau này. Cách tốt nhất để làm điều này là sử dụng FileCleaningTracker, mà bạn có thể đặt trên DiskFileItemFactory. Tuy nhiên, nếu bạn sử dụng trình theo dõi như vậy, thì bạn phải xem xét những điều sau: Tệp tạm thời sẽ tự động bị xóa ngay khi chúng không còn cần thiết nữa. (Thêm chính xác, khi phiên bản tương ứng của Tệp là rác được thu thập.) Điều này được thực hiện bởi cái gọi là sợi gặt, được bắt đầu tự động khi lớp FileCleaner được tải. Nó có thể có ý nghĩa để chấm dứt chuỗi đó, ví dụ: nếu ứng dụng web của bạn kết thúc. Xem phần "Làm sạch tài nguyên" trong hướng dẫn của người dùng về tải tệp chung.

Vì vậy, vâng closecleanup là cần thiết, như FileItem có thể biểu thị một tập tin thực trên đĩa.

+0

đúng tôi nếu im sai, nhưng streaming api không sử dụng bất kỳ đối tượng DiskFileItemFactory. hoặc là sử dụng nó ngụ ý? – user571099

+0

@ user571099. Nếu bạn làm theo các liên kết trong câu hỏi của bạn và bấm vào 'Hướng dẫn sử dụng' trên đầu trang đó, bạn sẽ thấy cách DiskFileItemFactory được sử dụng. –

+0

@Alexander Pogrebnyak, tôi nghĩ user571099 là đúng.Các hướng dẫn sử dụng đề cập đến phương pháp truyền thống (tải lên tập tin phổ biến) tải lên tệp, cần thư mục tạm thời cho các tệp vượt quá kích thước ngưỡng. Các tập tin cần xóa, Vâng các sợi reaper là cho mục đích này.Trong khi trong api streaming, chúng tôi không sử dụng DiskFileItem trong Stream API, bạn có thể thấy việc sử dụng ví dụ, mà không sử dụng DiskFileItemFactory. Để trả lời câu hỏi gốc, dữ liệu được lưu trữ trong bộ nhớ dưới dạng byte [], và có bạn cần phải đóng InputStream. Câu trả lời được chấp nhận là chính xác. –

2

Nó được lưu trữ dưới dạng byte[] trong bộ nhớ Java.

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