Configuración de cargas de archivos
Para crear un campo para subir archivos en la infraestructura de interfaz de usuario web, utilice el widget de carga de archivos, que es una extensión del control de campo de texto en Ext JS.
El gráfico siguiente muestra un ejemplo de un control para subir archivos creado mediante Ext JS (control Attach Photo o Adjuntar fotografía). En un navegador web, el campo de entrada se utiliza como un archivo. En el gráfico siguiente se muestra un campo de texto con un botón Examinar. Al pulsar en Examinar, se abre un recuadro de diálogo de selección de archivos. El recuadro de diálogo es específico del sistema operativo y no se puede personalizar.

Debe además ajustar las propiedades siguientes en yfs.properties para configurar la carga de archivos.
Utilice las propiedades sc.file.upload.maxfilesize y sc.file.upload.maxfilesize.nombre_tabla para especificar el tamaño de los archivos que se pueden subir.
Utilice las propiedades sc.file.upload.allowedfiletypes y sc.file.upload.allowedfiletypes.nombre_tabla para especificar el tipo de archivos que se puede subir.
- Utilice la propiedad sc.file.upload.dir para especificar un directorio que contendrá temporalmente los archivos subidos.
- Utilice la propiedad sc.file.upload.type para decidir cuándo cargar el archivo en el servidor.
{{{
<filter-mapping>
<filter-name>struts</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts-cleanup</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
}}}- Se realiza la validación de archivos para el tipo. Las validaciones también tienen lugar en el lado del servidor para el nombre y el tipo de archivo. La validación del tamaño no es posible en el navegador.
- Los archivos se colocan dentro de un subdirectorio del directorio temporal que se especifica en la propiedad sc.file.upload.dir en el archivo yfs.properties (
{sc.file.upload.dir}/{App_Server_Name}/{userID of the user uploading the files}/{session ID of the session which is uploading the files}). Los valoresApp_Server_Name,userIDyJsessionIDse eliminarán de todos los caracteres especiales. - El valor de datos internos del widget para cargar archivos (FileUploadField) se
modifica a
SCFile:<Element_ID>. Por ejemplo:{User : { UserId : "user1", attachFile : "SCFile:ext-comp-1037" } }
- Una vez que los archivos se envían en secuencia correctamente al servidor, el
elemento FileAttachments con la información de archivo (como ID de archivo exclusivo,
ubicación de archivo e ID de widget) se añade al objeto de datos de la pantalla que se
utiliza en la operación de subida. La llamada de la API real para enviar información de
archivo a la base de datos se realiza con esta entrada.
A continuación se muestra el cambio de un modelo de datos de ejemplo después de añadir la información:
{User : { UserId : "user1", attachFile : "user1_1267599880675_1" } FileAttachments : { FileAttachment : { file_id : "user1_1267599880675_1", file_path : "att2.bmp", Element_ID : "ext-comp-1037" } } }
- Hay un error al enviar archivos al servidor.
- Se produce una excepción al intentar persistir archivos en la base de datos como parte de la llamada de la API (es decir, después de que los archivos se hayan colocado correctamente en el servidor).
Los sucesos se llaman cuando se suprimen los archivos de la ubicación temporal en el servidor.
Proteger la supresión de archivos
La interfaz ISecureFileDelete permite suprimir con seguridad un archivo que se ha cargado en la ubicación temporal del servidor. Utilice la propiedad siguiente en el archivo yfs.properties para conectar la interfaz ISecureFileDelete:
sc.secure.file.delete.impl=/*
Asegúrese de que sc.secure.file.delete.impl es una ruta completamente cualificada a la implementación de clase Java™ de la interfaz ISecureFileDelete. La definición de la interfaz ISecureFileDelete tiene un método, que debe implementarse:
+
/**
* @param file is an existing file which has to be deleted
* from temporary location of the server. This method
* implementation gets called only when file exists
* on the server location.
* @return true if the file delete is successful, false otherwise.
*/
boolean deleteFile(File file);De forma predeterminada,
esta disponible suprimir el archivo de forma segura. Se ha conectado una implementación
predeterminada para suprimir archivos de forma segura. La clase de implementación
predeterminada es 'com.sterlingcommerce.woodstock.util.frame.file.impl.PLTSecureFileDeleteImpl'. Si la clase de implementación conectada no es válida o no es accesible, el archivo se suprime utilizando la API de supresión de archivos Java.