2011-09-07 33 views
5

Estoy usando PHP para crear un archivo de imagen en mi servidor. Ahora necesito subir esto a través de un POST a un servidor de un tercero. Lo más fácil sería usar un script cURL del lado del servidor para lograr eso, pero tengo que hacerlo a través de mi cliente, porque debe cargarse en el contexto de la sesión activa entre el cliente y el servidor de terceros. La pregunta es ¿cómo puedo lograr esto más fácil?usando Javascript para cargar un archivo remoto en mi servidor a un servidor de terceros

  1. ¿Es posible utilizar un formulario HTML o una llamada AJAX y cargar la imagen con un URL? La cosa es que el backend de un tercero no acepta URLs, necesita ser representado como si fuera una carga a través de un formulario web ...

  2. Si eso no es posible, estaba pensando en usar un AJAX llame para descargar la imagen y guardar los contenidos en una variable. Luego, cree un formulario que cargue el contenido de la imagen como si se hubiera seleccionado un archivo local en el formulario. ¿Cómo debo lograr eso?

Al cargar un archivo a través de un formulario web y mirar las cabeceras HTTP que se envía veo algo como esto:

------WebKitFormBoundary3ygta7rqeBm1krBO 
Content-Disposition: form-data; name="MAX_FILE_SIZE" 

10000000 
------WebKitFormBoundary3ygta7rqeBm1krBO 
Content-Disposition: form-data; name="uploadedfile"; filename="test.jpg" 
Content-Type: image/jpeg 


------WebKitFormBoundary3ygta7rqeBm1krBO-- 

Debería crear una cadena como en este formato y luego enviar esa como datos a través de una llamada AJAX? ¿Dónde coloco los datos de imagen binarios reales? Supongo que las herramientas de desarrollador de Chrome suprimen esa información ...

Gracias por cualquier apuntador.

Respuesta

1

Creo que lo más fácil parece ser lo que ha dicho, cárguelo al tercero a través de su servidor. ¿Hay alguna manera de obtener lo que sea de la sesión del usuario a través de su script PHP?

De lo contrario, puede intentar devolver al cliente (tal vez mediante AJAX) la imagen en algún formato codificado, como base64, después de que su servidor la haya generado, y luego crear un XHR personalizado para enviar el archivo a la tercera parte. .. He aquí una muestra:

var boundary = this.generateBoundary(); 
var xhr = new XMLHttpRequest; 

xhr.open("POST", this.form.action, true); 
xhr.onreadystatechange = function() { 
    if (xhr.readyState === 4) { 
     alert(xhr.responseText); 
    } 
}; 
var contentType = "multipart/form-data; boundary=" + boundary; 
xhr.setRequestHeader("Content-Type", contentType); 

for (var header in this.headers) { 
    xhr.setRequestHeader(header, headers[header]); 
} 

// here's our data variable that we talked about earlier 
var data = this.buildMessage(this.elements, boundary); 

// finally send the request as binary data 
xhr.sendAsBinary(data); 

Ver más información aquí (por debajo de la sección "el objeto XMLHttpRequest"):
http://igstan.ro/posts/2009-01-11-ajax-file-upload-with-pure-javascript.html

Cuestiones relacionadas