XForms/Subir Archivos
Motivación
[editar]El elemento de carga le permite seleccionar un archivo del sistema de archivos utilizando el sistema operativo "Browse" de la interfaz de usuario. Este archivo puede ser transferido al servidor de archivos que la forma de la tela reside.
Pantalla de Imagen
[editar]Aquí está una imagen de la pantalla de la extensión de Firefox XForms control de carga después de la carpeta C: \ tmp \ foo.xml fue seleccionado:
Los Elementos de Carga de XForms
[editar]
<xf:upload ref="XPathExpression" mediatype="text/xml">
<xf:filename ref="XPathExpression" />
<xf:mediatype ref="XPathExpression" />
</xf:upload>
Programa de Ejemplo
[editar]Este programa muestra tiene una variable de instancia única denominada "Archivo". Al final de la selección de esta variable se establece en el nombre de ruta del archivo que acaba de seleccionar.
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:xf="http://www.w3.org/2002/xforms"
xmlns:ev="http://www.w3.org/2001/xml-events"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>
<head>
<title/>
<xf:model>
<xf:instance xmlns="">
<Data>
<File xsi:type="xs:anyURI"/>
</Data>
</xf:instance>
</xf:model>
</head>
<body>
<xf:upload ref="/Data/File">
<xf:filename>file:///C:/tmp/*.xml</xf:filename>
<xf:mediatype>text/xml</xf:mediatype>
</xf:upload>
<br/>
<xf:output ref="/Data/File">
<xf:label>File: </xf:label>
</xf:output>
</body>
</html>
Discución
[editar]En el momento de escribir estas líneas, hay poca documentación sobre cómo el control de carga funciona. La captura de pantalla de arriba fue tomada desde el Firefox XForms 0.8 corriendo en Firefox 3 aplicación. Tenga en cuenta que el nombre del archivo aparece dos veces en el propio control. Esto puede no ser el comportamiento futuro. Esto puede ser que el nombre de archivo y el texto MediaType dentro del control se está visualizando. No hay documentación aún sobre cómo desactivar el desencadenante claro.
Todavía no hay documentación sobre cómo cargar los datos de instancia en el modelo mediante el control de carga. En este momento los datos de instancia debe ser codificada en el atributo src de una instancia.
Las siguientes cargas tanto una imagen y un URI.
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ev="http://www.w3.org/2001/xml-events"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xf="http://www.w3.org/2002/xforms"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<head>
<title/>
<xf:model>
<xf:instance xmlns="">
<data>
<image xsi:type="xs:base64Binary"/>
<uri xsi:type="xs:anyURI"/>
</data>
</xf:instance>
<xf:submission id="save" action="http://xformstest.org/cgi-bin/showinstance.sh" method="post"/>
</xf:model>
</head>
<body>
<xf:upload ref="image">
<xf:label>Upload Photo:</xf:label>
</xf:upload>
<br/>
<xf:upload ref="uri">
<xf:label>Upload File:</xf:label>
<xf:filename>file:///C:/tmp/*.xml</xf:filename>
<xf:mediatype>text/xml</xf:mediatype>
</xf:upload>
<br/>
<xf:output ref="image">
<xf:label>image: </xf:label>
</xf:output>
<br/>
<xf:output ref="uri">
<xf:label>uri: </xf:label>
</xf:output>
<br/>
<xf:submit submission="save">
<xf:label>Save</xf:label>
</xf:submit>
</body>
</html>
Carga de Archivos Binarios
[editar]Cualquier tipo de archivo como un archivo de imagen o XML se puede convertir en un archivo codificado de 64 bits, almacenados en la instancia y luego se transmite al servidor dentro de un POST. En el servidor, el archivo puede ser convertida de nuevo en una cadena o binario.
Muestra de Echo con el binario a una Cadena de Codificación
[editar]La siguiente es una secuencia de comandos simple eco escrita en XQuery que hace eco de nuevo el archivo binario en XML. Se trata de un guión XQuery que utiliza una función de conversión de binario a cadena. Esto toma un archivo de tipo xs: base64Binary y devuelve una representación de cadena del archivo. Los datos que se devuelven en el elemento con el nombre del elemento "xml-base64".
xquery version "1.0"; declare option exist:serialize "method=xml media-type=text/xml indent=yes"; let $post-data := request:get-data() let $decode := util:binary-to-string($post-data/xml-base64) return <results> {$decode} </results>
Ejemplo de Formulario
[editar]
<html
xmlns="http://www.w3.org/1999/xhtml"
xmlns:xf="http://www.w3.org/2002/xforms"
xmlns:ev="http://www.w3.org/2001/xml-events"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>
<head>
<title>Upload XML</title>
<xf:model>
<xf:instance xmlns=''>
<data>
<xml-base64 xsi:type="xs:base64Binary"/>
</data>
</xf:instance>
<xf:submission id='post-to-echo'
action='echo-base64-binary.xq' replace="all"
method='post'/>
</xf:model>
</head>
<body>
<br/>
<xf:upload ref="xml-base64">
<xf:label>Upload XML File:</xf:label>
</xf:upload>
<br/>
<xf:output ref="xml-base64">
<xf:label>XML file encoded in base64binary: </xf:label>
</xf:output>
<br/>
<xf:submit submission="post-to-echo">
<xf:label>Post to Echo</xf:label>
</xf:submit>
</body>
</html>
Ejemplo de Archivo
[editar]
<test>This is a small XML file.</test>
Advertencias
[editar]El atributo de tipo de datos de asignación xsi: type = "xs: anyURI" debe estar asociado a la variable utilizada para almacenar el nombre de ruta del archivo.