Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá, galera!
Estou chegando agora, completamente novato, e peço um pouco de paciência para vocês. http://forum.imasters.com.br/public/style_emoticons/default/natal_wink.gif
Bem, aqui na empresa nós estamos implementando algumas funções em nossos aplicativos VB6 para execução de processos via Web, como o envio de arquivos.
Conseguimos fazer bastante coisa com a biblioteca MSXML e com o a classe XMLHTTPRequest do Windows, como por exemplo receber o resultado de uma página HTML ou enviar POSTs e GETs para scripts ASP remotos.
Só que nós empacamos num problema: enviar um POST para um servidor como se estivéssemos usando um formulário HTML com um controle FILE.
Alguém tem alguma idéia de como a gente pode solucionar isso? O XMLHTTPRequest consegue fazer isso pelo VB6?
Obrigado pela resposta Luiz!
Eu já andei lendo algumas coisas na web e vi que com JavaScript não há como fazer porque, por segurança, ele não tem acesso ao sistema de arquivos da máquina cliente.
Em se tratando do VB6 eu teria que fazer internamento um processo semelhante ao que o browser faz na hora de montar o cabeçalho para envio, com os dados do formulário e mais o arquivo que quero enviar. É aí que eu estou travado... http://forum.imasters.com.br/public/style_emoticons/default/natal_sad.gif
Achei uma solução interessante, usando XML com um nó do tipo binário:
Function enviarArquivos( strArquivo as String) Dim ado_stream As ADODB.Stream Dim xml_dom As msxml2.DOMDocument Dim xmlhttp As msxml2.xmlhttp Set ado_stream = New ADODB.Stream Set xml_dom = New msxml2.DOMDocument xml_dom.loadXML "<?xml version=""1.0"" ?> <root/>" xml_dom.documentElement.setAttribute "xmlns:dt", "urn:schemas-microsoft-com:datatypes" Set 1_node1 = xml_dom.createElement("file1") 1_node1.dataType = "bin.base64" ado_stream.Type = 1 ' 1=adTypeBinary ado_stream.open ado_stream.LoadFromFile strArquivo 1_node1.nodeTypedValue = ado_stream.Read(-1) ' -1=adReadAll ado_stream.Close xml_dom.documentElement.appendChild (l_node1) Set xmlhttp = New msxml2.xmlhttp xmlhttp.open "POST", strURL, False xmlhttp.send xml_dom enviarArquivos = xmlhttp.responseTextEnd Function
Do lado do servidor tem que haver um script semelhante a esse para armazenar o arquivo:
<%@ LANGUAGE=VBScript%><% Option Explicit Response.Expires = 0 ' define variables and COM objects dim ado_stream dim xml_dom dim xml_file1 ' create Stream Object set ado_stream = Server.CreateObject("ADODB.Stream") ' create XMLDOM object and load it from request ASP object set xml_dom = Server.CreateObject("MSXML2.DOMDocument") xml_dom.load(request) ' retrieve XML node with binary content set xml_file1 = xml_dom.selectSingleNode("root/file1") ' open stream object and store XML node content into it ado_stream.Type = 1 ' 1=adTypeBinary ado_stream.open ado_stream.Write xml_file1.nodeTypedValue ' save uploaded file ado_stream.SaveToFile "c:\temp\teste.jpg" , 2 ' 2=adSaveCreateOverWrite ado_stream.close ' destroy COM object set ado_stream = Nothing set xml_dom = Nothing ' write message to browser Response.Write "Upload successful!"%>
O artigo do qual extraí o texto pode ser encontrado em http://www.15seconds.com/issue/010522.htm
Aff...eta pressa.
Eu li seu post até a parte de enviar formulário e não vi a questão do campo FILE ali.
Dá última vez que eu procurei algo sobre isso para fazer em javascript (Ajax) acabei não achando e tendo que apelar para frames escondidos ^^. Uma boa opção de busca é dar uma olhada se já conseguiram fazer com javascript, pois o componente é bem semelhante - para não dizer o mesmo.
Esse era o post:
Para fazer o envia via POST com o xmlHTPPRequest você tem que fazer assim:
Dim http As XMLHTTPRequestDim info As Stringhttp.open "POST", "url"info = "campo1=valor1&campo2=valor"http.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"http.setRequestHeader "Content-Length", Len(info)http.send info
Os campos do formulário estão na variavel info. Para colocá-los lá é só seguir a idéia do QueryString das páginas, e sempre lembrando de tratar - URLEncode do ASP por exemplo - os valores para evitar que o usuário modifique alguma coisa que não deve.