Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

robsondeavila

Enviar arquivo e variaveis para formulário externo

Recommended Posts

Oi amigos

 

Estou precisando muito da ajuda de vcs.

 

Como não estou acostumado a postar aqui no fórum peço desculpas se não seguir o padrão correto.

 

Vamos ao problema:

 

Sempre quando preciso submeter a algum formulário externo ao meu servidor utilizo o script:

 

<%

 

url = "http://www.sitetal.com.br/form.asp?var1=x&var2=y"

 

' Cria a instância no objeto no servidor

Set ObjXML = Server.CreateObject("Microsoft.XMLHTTP")

 

' Obtem a página do endereço base do registro.br

ObjXML.Open "GET", "" & url & "", False

 

'Envia a requisição e aguarda a Resposta

ObjXML.Send

 

'Guarda o Retorno em uma variável para comparação posterior

resultado = ObjXML.ResponseText

 

response.write "" & resultado & ""

 

%>

 

Posteriormente trabalho a variável resultado.

 

Agora estou precisando muito submeter um formulário de um site externo que possui ENCTYPE="multipart/form-data" para fazer upload de arquivos, ou seja, preciso enviar um arquivo que está no meu servidor para outro utilizando um formulário deles, com as variaveis e o arquivo para upload.

 

Para facilitar coloquei em um dos sites que gerencio, um script simples para upload de imagens o qual podem testar os scripts a vontade.

 

http://www.sitweb.com.br/upload.asp

 

Já procurei de diversas formas scripts mas não consigo resolver isso de jeito nenhum.

 

Estou precisando demais de ajuda.

 

Desde já agradeço

 

Robson

Compartilhar este post


Link para o post
Compartilhar em outros sites

Realmente melhor fazer dentro do proprio servidor com o metodo POST

 

Na verdade vou ter que utilizar o servidor externo, pois estou fazendo uma integração com outro sistema, e uma das operações é justamente enviar um arquivo via formulário.

 

Robson

Compartilhar este post


Link para o post
Compartilhar em outros sites

você até pode usar um sistema tipo explorer, e terá mais controle de arquivo...

Compartilhar este post


Link para o post
Compartilhar em outros sites

você até pode usar um sistema tipo explorer, e terá mais controle de arquivo...

 

Não entendi bem como fazer isso.

 

De qualquer forma, após dar uma pesquisada achei alguns scripts, mas não estou conseguindo utilizá-los.

 

Alguém pode me ajudar?

 

 

Script 1

 


/* 
* Ajax with attachments
* Author: Giovanni Aiello, Marco Alessi
* Company: Engisud S.p.A. - Palermo-Italy
* e-mail: giovanni.aiello@eng.it ; marco.alessi@eng.it
*/
//La funzione permette la spedizione di xmlhttprequests con allegati
function sendAjaxRequestWithAttachments(url,attachments){//La richiesta accetta la URL del server ove è pubblicato il servizio e un array di attachments

var ieBrowser=window.ActiveXObject;
if (document.implementation && document.implementation.createDocument){//for Mozilla
var xml = document.implementation.createDocument("","",null);

var net=new Object();

net.READY_STATE_UNINITIALIZED=0;
net.READY_STATE_LOADING=1;
net.READY_STATE_LOADED=2;
net.READY_STATE_INTERACTIVE=3;
net.READY_STATE_COMPLETE=4;


/*--- content loader object for cross-browser requests ---*/
net.ContentLoader=function(url,onload,method,onerror,params,contentType){
	this.req=null;
	this.onload=(onload) ? onload : null;
	this.onerror=(onerror) ? onerror : this.defaultError;
	params=(params==void(0)) ? null : params;
	this.loadXMLDoc(url,method,params,contentType);
}


xml.async=false;
var parameters="--ZEND-12345\n";
for(var i=0;i<attachments.length;i++){
var attachment=attachments;//URL del singolo attachment
var attachmentToLoad;
if(attachment.indexOf("file:///")!=0)
attachmentToLoad="file:///"+attachment;
else
attachmentToLoad=attachment;
xml.load(attachmentToLoad);//Carica l'attachment
parameters+="Content-Disposition: form-data; name=\"FILE1\"; filename=\""+ attachment + "\" \nContent-Type: text/xml\n\n"+new XMLSerializer().serializeToString(xml)+"--ZEND-12345\n";
}
}
if (ieBrowser){//For IE
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
//Costruisce body in base al contenuto dell'array di attachments da inserire
var parameters="--ZEND-12345\n";
for(var i=0;i<attachments.length;i++){
var attachment=attachments;//URL del singolo attachment
loadXML(attachment);//Carica l'attachment
parameters+="Content-Disposition: form-data; name=\"FILE1\"; filename=\""+ attachment + "\" \nContent-Type: text/xml\n\n"+xmlDoc.xml+"--ZEND-12345\n";
}

}
var xmlHttp=new net.ContentLoader(url,CreateScript,null,"POST",parameters,"multipart/form-data; boundary=ZEND-12345");
}

function loadXML(xmlFile){
xmlDoc.async="false";
xmlDoc.onreadystatechange=verify;
xmlDoc.load(xmlFile);
}

function verify(){ 
if (xmlDoc.readyState != 4){ 
return false; 
}
}

function CreateScript(){
alert("do something...");
}


Script 2

 


<%
do_vbsUpload()

Sub do_vbsUpload()
FileName="d:\web\localuser\netveiculos\www\anunciarfacil\erro.gif"
DestURL="http://www.sitweb.com.br/uploadgb.asp?data=6/8/2010&cliente=Robsonteste&saveto=disk&janela=sim&banco=sim"
FieldName = "FILE1"

UploadFile DestURL, FileName, FieldName
End Sub

'Upload file using input type=file
Sub UploadFile(DestURL, FileName, FieldName)
'Boundary of fields.
'Be sure this string is Not In the source file
Const Boundary = "---------------------------0123456789012"

Dim FileContents, FormData
'Get source file As a binary data.
FileContents = GetFile(FileName)

'Build multipart/form-data document
FormData = BuildFormData(FileContents, Boundary, FileName, FieldName)

'Post the data To the destination URL
IEPostBinaryRequest DestURL, FormData, Boundary
End Sub

'Build multipart/form-data document with file contents And header info
Function BuildFormData(FileContents, Boundary, FileName, FieldName)
Dim FormData, Pre, Po
Const ContentType = "application/upload"

'The two parts around file contents In the multipart-form data.
Pre = "--" + Boundary + vbCrLf + mpFields(FieldName, FileName, ContentType)
Po = vbCrLf + "--" + Boundary + "--" + vbCrLf

'Build form data using recordset binary field
Const adLongVarBinary = 205
Dim RS: Set RS = CreateObject("ADODB.Recordset")
RS.Fields.Append "b", adLongVarBinary, Len(Pre) + LenB(FileContents) + Len(Po)
RS.Open
RS.AddNew
Dim LenData
'Convert Pre string value To a binary data
LenData = Len(Pre)
RS("b").AppendChunk (StringToMB(Pre) & ChrB(0))
Pre = RS("b").GetChunk(LenData)
RS("b") = ""

'Convert Po string value To a binary data
LenData = Len(Po)
RS("b").AppendChunk (StringToMB(Po) & ChrB(0))
Po = RS("b").GetChunk(LenData)
RS("b") = ""

'Join Pre + FileContents + Po binary data
RS("b").AppendChunk (Pre)
RS("b").AppendChunk (FileContents)
RS("b").AppendChunk (Po)
RS.Update
FormData = RS("b")
RS.Close
BuildFormData = FormData
End Function

'sends multipart/form-data To the URL using IE
Function IEPostBinaryRequest(URL, FormData, Boundary)
Dim IE: Set IE = CreateObject("InternetExplorer.Application")
'IE.Visible = True
IE.Navigate URL, , , FormData,"Content-Type: multipart/form-data; boundary=" + Boundary + vbCrLf 
On Error Resume Next
IEPostBinaryRequest = IE.Document.body.innerHTML
IE.Quit
End Function

'Information In form field header.
Function mpFields(FieldName, FileName, ContentType)
Dim MPTemplate 'template For multipart header
MPTemplate = "Content-Disposition: form-data; name=""{field}"";" + _
" filename=""{file}""" + vbCrLf + _
"Content-Type: {ct}" + vbCrLf + vbCrLf
Dim Out
Out = Replace(MPTemplate, "{field}", FieldName)
Out = Replace(Out, "{file}", FileName)
mpFields = Replace(Out, "{ct}", ContentType)
End Function

'Makes File Binary
Function GetFile(FileName)
Dim Stream: Set Stream = CreateObject("ADODB.Stream")
Stream.Type = 1 'Binary
Stream.Open
Stream.LoadFromFile FileName
GetFile = Stream.Read
Stream.Close
End Function

'Converts OLE string To multibyte string
Function StringToMB(S)
Dim I, B
For I = 1 To Len(S)
B = B & ChrB(Asc(Mid(S, I, 1)))
Next
StringToMB = B
End Function
%>

Não consegui utilizar nenhum dos dois.

 

Preciso demais disso.

 

Robson

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.