Usando javascript, tengo un archivo en cadena (obtenido con la solicitud ajax).Cómo subir una cadena como archivo con jQuery u otro framework js
¿Cómo cargarlo como archivo al servidor con otra solicitud de AJAX?
Usando javascript, tengo un archivo en cadena (obtenido con la solicitud ajax).Cómo subir una cadena como archivo con jQuery u otro framework js
¿Cómo cargarlo como archivo al servidor con otra solicitud de AJAX?
Es necesario configurar la cabecera Content-type
solicitud a multipart/form-data
y jugar con el formato un poco, I wrote this en llanura Ol JavaScript (TM), pero aquí se puede volver a trabajar para una biblioteca:
EDIT: tenía mi café ahora, para lo modificó para jQuery (sin-biblioteca versión here):
// Define a boundary, I stole this from IE but you can use any string AFAIK
var boundary = "---------------------------7da24f2e50046";
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'
// Add your data:
+ data + '\r\n'
+ '--'+ boundary + '--';
$.ajax({
contentType: "multipart/form-data; boundary="+boundary,
data: body,
type: "POST",
url: "http://asite.com/apage.php",
success: function (data, status) {
}
});
Mmm, ¡agradable! No sabía que eso era posible en una solicitud de Ajax. –
@Pekka: Claro que sí. Útil si no tiene control sobre el servidor que está cargando y TIENE que aceptar un archivo de texto publicado con multipart/form-data. –
Esto funcionó, a excepción de dos ajustes para trabajar con express/node: 1) el último límite debe ser '+ '-' + boundary + '-';' y también el contentType en la llamada ajax debe ser: ' "multipart/form-data; boundary =" + boundary' – chovy
es cómo hacerlo sin necesidad de construir manualmente el cuerpo de la petición de varias partes aquí:
var s = 'some string data';
var filename = 'foobar.txt';
var formData = new FormData();
formData.append('file', new File([new Blob([s])], filename));
formData.append('another-form-field', 'some value');
$.ajax({
url: '/upload',
data: formData,
processData: false,
contentType: false,
type: 'POST',
success: function() {
console.log('ok');
},
error: function() {
console.log('err'); // replace with proper error handling
}
});
me parece agradable ... ¿puedo transcodificar Base64 a un objeto de archivo? Si no, puedo usar el base64 y decodificarlo en el servidor. pero soy curioso – redestructa
¿El objeto FormData es compatible con el navegador? –
Aclare: ¿tiene la ruta de archivo como una cadena o tiene contenido de archivo como cadena y desea cargarlo como un archivo? –
@Marko: Se lee como si tuviera el contenido del archivo en una cadena, que obtuvo de una solicitud ajax. –