2012-07-11 5 views

Respuesta

5

¿dónde se almacenan los datos?

No creo que se haya almacenado. La API de transmisión no utiliza DiskFileItemFactory. Pero usa un buffer para copiar datos como lo ha publicado BalusC. Una vez que tenga la corriente de la carga, puede utilizar

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

Mira el API

3

Aquí está el javadoc para DiskFileItemFactory.

Implementación predeterminada de FileItemFactory. Esta implementación crea instancias de FileItem que mantienen su contenido en la memoria, para artículos más pequeños, o en un archivo temporal en el disco, para artículos más grandes. El umbral de tamaño, por encima del cual el contenido se almacenará en el disco, es configurable, así como el directorio en el que se crearán los archivos temporales .

Si no está configurado de otro modo, los valores de configuración predeterminados son como sigue :

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

archivos temporales, que son creados por los elementos de archivo, se deben eliminar más adelante. La mejor forma de hacerlo es utilizando FileCleaningTracker, , que puede configurar en DiskFileItemFactory. Sin embargo, si usa tal rastreador, entonces debe considerar lo siguiente: Los archivos temporales se eliminan automáticamente tan pronto como ya no los necesitan. (Más precisamente, cuando la instancia correspondiente de File es basura recopilada). Esto se hace mediante el llamado hilo de reaper, que es se inicia automáticamente cuando se carga la clase FileCleaner. Es posible que tenga sentido para terminar ese hilo, por ejemplo, si finaliza su aplicación web . Consulte la sección sobre "Limpieza de recursos" en la guía de commons-fileupload.

Así que, sí close y cleanup son necesarios, como FileItem puede denotar un archivo real en el disco.

+0

me corrija si estoy equivocado, pero la API de streaming no utiliza ningún objeto DiskFileItemFactory. o es su uso implícito? – user571099

+0

@ user571099. Si sigue el enlace de su pregunta y hace clic en 'User Guide' en la parte superior de esa página, verá cómo se utiliza DiskFileItemFactory. –

+0

@Alexander Pogrebnyak, creo que user571099 es correcto. La guía de usuario se refiere al método tradicional (carga de archivos comunes no fluidos) de carga de archivos, que necesita la carpeta temporal para archivos que superan el tamaño del umbral. Los archivos necesitan ser eliminados. Bueno, el hilo del reaper es para este propósito.Mientras que en la API de transmisión no usamos el DiskFileItem en Stream API, puede ver el uso de ejemplo, que no usa DiskFileItemFactory. PARA responder a la pregunta original, los datos se almacenan en la memoria en forma de byte [], y sí, debe cerrar el InputStream. La respuesta aceptada es correcta. –

2

Se almacena como byte[] en la memoria de Java.

Cuestiones relacionadas