2012-06-08 43 views
5

La pregunta hecha aquí: How can I send an HTTP POST request to a server from Excel using VBA? es casi exactamente lo que estaba buscando, excepto que estoy tratando de enviar una serie de archivos al servidor. Busqué en Google y encontré How do I upload a zip file via HTTP post using VBA?. Esto también fue bueno, pero bastante desalentador, parece mucho trabajo (no solo hacer un formulario HTML aquí ...).¿Cómo enviar archivos a través de HTTP_POST con Excel usando VBA?

Opción # 2 aquí: http://www.motobit.com/tips/detpg_post-binary-data-url/ (como se menciona en la pregunta sobre SO mencionada anteriormente) parece que funcionaría bien, pero como trabajo en JS y CSS, no tengo idea de cómo crear FormData (los archivos binarios a enviar al servidor) en el ejemplo.

¿Alguien puede ayudarme? Básicamente, quiero enviar de 3 a 6 archivos a través de HTTP_POST a través de VBA desde Excel a una secuencia de comandos PHP en un servidor web que está esperando datos de formularios como. Un formulario HTML para manejar este sería el resultado:

<form action="upload_file.php" method="post" enctype="multipart/form-data"> 
    <input name="userfile[]" type="file" /><br /> 
    <input name="userfile[]" type="file" /><br /> 
    <input name="userfile[]" type="file" /><br /> 
    <input type="submit" /> 
</form> 

Gracias a todos de antemano.

EDITAR - 2 ° de agosto 2012

todavía estoy tratando de trabajar en este tema. No sé VBA/6, básicamente JS básico, así que estoy un poco perdido. Aquí es lo que he hecho hasta ahora:

Sub HTTPInternetPutFile() 

    ' create new object with WinHttpRequest for this operation 
    Dim WinHttpReq As Object 
    Set WinHttpReq = CreateObject("WinHttp.WinHttpRequest.5.1") 
    Dim FormFields As String 

    ' initialize variables that we will set and pass as parameters 
    Dim sfpath 
    Dim strURL As String 
    Dim StrFileName As String 


     StrFileName = "CLIPrDL.csv" 
     sfpath = "C:\CLIPr\" 
     strURL = "http://s0106001c10187ab1.gv.shawcable.net/uploadtest/upload_file.php" 


     WinHttpReq.Open "POST", strURL, False 


     ' Set headers 
     WinHttpReq.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" 
     WinHttpReq.setRequestHeader "Accept-Charset", "ISO-8859-1,utf-8" 
     WinHttpReq.setRequestHeader "Content-Type", "multipart/form-data" 
     ' WinHttpReq.setRequestHeader "Content-Type", "text/html;charset=UTF8" 
     WinHttpReq.setRequestHeader "Content-Disposition", "form-data; name=""userfile[]""" 

     ' I dont understand this... why use fileup?? 
     FormFields = """filename=" & StrFileName & """" 
     FormFields = FormFields & "&" 
     FormFields = FormFields & sfpath 

     ' so comment it out for now 
     ' WinHttpReq.Send FormFields 
     WinHttpReq.Send sfpath & StrFileName 

     ' output this var to a message box becuase I dont know what it does really 
     MsgBox FormFields 
     ' Display the status code and response headers. 
     MsgBox WinHttpReq.GetAllResponseHeaders 
     MsgBox WinHttpReq.ResponseText 


End Sub 

Los cuadros de mensaje en la parte inferior de la secuencia de comandos de salida hacen encabezados y respuesta (página HTML en blanco) del servidor. Siento que hay algo que no estoy configurando en los encabezados para hacer feliz al servidor (nota: tratando de comentar el tipo de contenido).

Si alguien tiene experiencia en utilizar el objeto WinHttpRequest en VBA/6 para POSTAR un archivo binario a través de HTTP, ¡por favor ayuda! :)

+0

¿Qué tipo de archivos: texto o binario? –

+0

¿Sería capaz de enviar los archivos uno por uno? ¿O eso no es una opción? – ikh

+0

@TimWilliams binary, excel files. – jonathanbell

Respuesta

Cuestiones relacionadas