Ver Mensaje Individual
  #1 (permalink)  
Antiguo 31/01/2007, 08:41
Toni
 
Fecha de Ingreso: abril-2003
Mensajes: 136
Antigüedad: 22 años
Puntos: 0
Subir archivo binario a un campo blob de oracle desde un nodo de un documento xml

El tema es el siguiente.

1) Una página construye con código cliente y en memoria un documento XML. En uno de los nodos se le incluye un archivo binario, que después se asigna como valor de un campo oculto y se envía a la misma página aspx
2) Se procesa por código de servidor, selecciona el contenido binario del nodo xml e intenta insertarlo en un campo blob de oracle

1) código de la primera parte (funciona ok)
Código:
    <script language=javascript>
    function creaObjecte()
    {
       // create ADO-stream Object
       var ado_stream = new ActiveXObject("ADODB.Stream");
 
       // create XML document with default header and primary node
       var xml_dom = new ActiveXObject("MSXML2.DOMDocument");
       xml_dom.loadXML('<?xml version="1.0" ?> <root/>');
       // specify namespaces datatypes
       xml_dom.documentElement.setAttribute("xmlns:dt", "urn:schemas-microsoft-com:datatypes");
 
       // create a new node and set binary content
       var l_node1 = xml_dom.createElement("file1");
       l_node1.dataType = "bin.base64";
       // open stream object and read source file
       ado_stream.Type = 1;  // 1=adTypeBinary 
       ado_stream.Open(); 
       ado_stream.LoadFromFile("C:\\TEMP\\b.pdf");
       // store file content into XML node
       l_node1.nodeTypedValue = ado_stream.Read(-1); // -1=adReadAll
       ado_stream.Close();
       xml_dom.documentElement.appendChild(l_node1);
 
       document.getElementById("p_arxiu").value = xml_dom.xml;
    }   
    </script>
2) código de la segunda parte. Inserta datos pero no inserta el binario en sí correctamente

Código:
    Protected Sub btnenviar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnenviar.Click
 
        ' Cadena de connexió a oracle
        'Dim connectionString As String = "Data Source=AJSTJUST; Password=ajstjust;User ID=AJSTJUST"
        Dim connectionString As String = "Data Source=AJSTJUSTCREAF; Password=sipan_mact;User ID=sipan_mactuacions"
 
        ' Recuperem l'arxiu binari del node que toca
        Dim nodeBinari As XmlNode
 
        Dim xmlHidden As XmlDocument
        xmlHidden = New XmlDocument()
        xmlHidden.LoadXml(arxiuBinari)
 
        ' Seleccionem el node que conté el binari
        nodeBinari = xmlHidden.DocumentElement.SelectSingleNode("file1")
        If (nodeBinari Is Nothing) Then
            Response.Write("No s'ha trobat el node<br>")
            Exit Sub
        End If
 
        ' Passem el contingut del node a format binari
        Dim binariFinal() As Byte = Convert.FromBase64String(nodeBinari.InnerText)
 
        Dim queryString As String = _
         "INSERT INTO DEMO (ID,THEBLOB) VALUES (1,'" & binariFinal(1) & "')"
 
        Using connection As New OracleConnection(connectionString)
            Dim command As New OracleCommand(queryString)
            command.Connection = connection
            Try
                connection.Open()
                command.ExecuteNonQuery()
            Catch ex As Exception
                Response.Write(ex.Message)
            End Try
        End Using
 
    End Sub
Creo que el problema está en este trozo:

Código:
        ' Passem el contingut del node a format binari
        Dim binariFinal() As Byte = Convert.FromBase64String(nodeBinari.InnerText)
 
        Dim queryString As String = _
         "INSERT INTO DEMO (ID,THEBLOB) VALUES (1,'" & binariFinal(1) & "')"
Si me podéis echar un cable os lo agradecería pues estoy un poco/bastante perdido. Toni.