¿Por qué no usar XMLHttpRequest()
con POST?
function beginQuoteFileUnquoteUpload(data)
{
var xhr = new XMLHttpRequest();
xhr.open("POST", "http://www.mysite.com/myuploadhandler.php", true);
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr.onreadystatechange = function()
{
if (xhr.readyState == 4 && xhr.status == 200)
alert("File uploaded!");
}
xhr.send("filedata="+encodeURIComponent(data));
}
La secuencia de comandos del manejador en el servidor solo escribe los datos del archivo en un archivo.
EDITAR
carga de archivos sigue siendo un HTTP POST con un tipo de contenido diferente. Puede utilizar este tipo de contenido y separar su contenido con límites:
function beginQuoteFileUnquoteUpload(data)
{
// Define a boundary, I stole this from IE but you can use any string AFAIK
var boundary = "---------------------------7da24f2e50046";
var xhr = new XMLHttpRequest();
var body = '--' + boundary + '\r\n'
// Parameter name is "file" and local filename is "temp.txt"
+ 'Content-Disposition: form-data; name="file";'
+ 'filename="temp.txt"\r\n'
// Add the file's mime-type
+ 'Content-type: plain/text\r\n\r\n'
+ data + '\r\n'
+ boundary + '--';
xhr.open("POST", "http://www.mysite.com/myuploadhandler.php", true);
xhr.setRequestHeader(
"Content-type", "multipart/form-data; boundary="+boundary
);
xhr.onreadystatechange = function()
{
if (xhr.readyState == 4 && xhr.status == 200)
alert("File uploaded!");
}
xhr.send(body);
}
Si desea enviar datos adicionales, que acaba de separar cada sección con un límite y describir las cabeceras Content-Disposition y de tipo de contenido para cada sección . Cada encabezado está separado por una nueva línea y el cuerpo está separado de los encabezados por una nueva línea adicional. Naturalmente, subir los datos binarios de esta manera sería un poco más difícil :-)
Editar más: se olvidó de mencionar, asegúrese de que la cadena de límite no está en el "archivo" de texto que está enviando, de lo contrario lo hará ser tratado como un límite.
Dudo que sea posible, pero pregunta interesante, 1 –
Esta parece ser la solución equivocada a su problema (si tienes control del lado del servidor). Si el contenido del archivo se generará a partir de una cadena, ¿por qué no simplemente POSTAR esa cadena y crear el archivo en el servidor (usando PHP o lo que sea)? Si está cargando un archivo a un destino de terceros, entonces ignore este comentario. –
@JonathanJulian, no importa qué, este uso huele a verdadero valor de hack -), truco impresionante! – nemesisfixx