2012-07-11 11 views

Odpowiedz

5

gdzie są przechowywane dane?

Nie sądzę, że jest przechowywany. Streaming API nie używa DiskFileItemFactory. Ale używa bufora do kopiowania danych opublikowanych przez BalusC. Gdy masz strumień upload, można użyć

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

spojrzeć na API

3

Oto javadoc dla DiskFileItemFactory.

Domyślna implementacja FileItemFactory. Implementacja ta tworzy wystąpienia FileItem, które przechowują swoją zawartość w pamięci, w przypadku mniejszych elementów, lub w pliku tymczasowym na dysku, w przypadku większych elementów. Próg wielkości, powyżej którego zawartość będzie przechowywana na dysku, jest konfigurowalny , podobnie jak katalog, w którym zostaną utworzone pliki tymczasowe .

Jeśli nie inaczej skonfigurowany, domyślne wartości konfiguracyjne są następująco:

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

pliki tymczasowe, które są tworzone dla przedmiotów plików powinny być usunięte później. Najlepszym sposobem na to jest użycie FileCleaningTracker, , który można ustawić w DiskFileItemFactory. Jeśli jednak korzystasz z takiego śledzenia, musisz wziąć pod uwagę następujące: Pliki tymczasowe są automatycznie usuwane, gdy tylko nie są już potrzebne. (Dokładniej: , gdy odpowiednia instancja pliku to śmieci zebrana.) Jest to wykonywane przez tzw. Wątek żniwiarki, który jest uruchamiany automatycznie po wczytaniu klasy FileCleaner. Może to być ma sens, aby zakończyć ten wątek, na przykład, jeśli kończy się Twoja internetowa aplikacja . Zobacz sekcję "Oczyszczanie zasobów" w podręczniku użytkownika commons-fileupload.

Więc tak close i cleanup są konieczne, ponieważ FileItem może oznaczać prawdziwą plik na dysku.

+0

mnie poprawić, jeśli im źle, ale API strumieniowego nie używa żadnych DiskFileItemFactory obiektów. czy jest to jego domniemane zastosowanie? – user571099

+0

@ user571099. Jeśli klikniesz link w swoim pytaniu i klikniesz "Podręcznik użytkownika" na górze tej strony, zobaczysz, jak używa się DiskFileItemFactory. –

+0

@Alexander Pogrebnyak, myślę, że user571099 ma rację. Podręcznik użytkownika odnosi się do tradycyjnej metody przesyłania plików bez przesyłania strumieniowego, która wymaga folderu tymczasowego dla plików przekraczających próg. Pliki wymagają usunięcia, Cóż, wątek żniwiarza jest w tym celu.Podczas gdy w api strumieniowym nie używamy DiskFileItem w Stream API, można zobaczyć przykład użycia, które nie używają DiskFileItemFactory. Aby odpowiedzieć na pierwotne pytanie, dane są przechowywane w pamięci w postaci bajtu [] i tak, należy zamknąć InputStream. Zaakceptowana odpowiedź jest poprawna. –

2

Jest przechowywany jako byte[] w pamięci Java.

Powiązane problemy