Utilizzando javascript, ho un file in stringa (ottenuto con una richiesta Ajax).Come caricare una stringa come file con jQuery o altro framework js
Come caricarlo come file sul server da un'altra richiesta Ajax?
Utilizzando javascript, ho un file in stringa (ottenuto con una richiesta Ajax).Come caricare una stringa come file con jQuery o altro framework js
Come caricarlo come file sul server da un'altra richiesta Ajax?
è necessario impostare l'intestazione Content-type
richiesta di multipart/form-data
e giocare con il formato un po ', I wrote this in Plain Ol' JavaScript (tm), ma si potrebbe facilmente rielaborarlo per una libreria:
EDIT: avevo il mio caffè adesso, cosí modificato per jQuery (no-library versione 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, bello! Non sapevo che era possibile in una richiesta Ajax. –
@Pekka: certo. Pratico se non hai il controllo sul server che stai caricando e deve accettare un file di testo pubblicato con multipart/form-data. –
Questo ha funzionato, tranne che per due aggiustamenti per lavorare con express/node: 1) l'ultimo limite deve essere "+" - "+ boundary +" - ";" e anche il contentType nella chiamata ajax deve essere: "multipart/form-data; boundary =" + boundary' – chovy
Ecco come farlo senza costruire manualmente la richiesta più parti del corpo:
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
}
});
sembra carino ... posso transcodificare Base64 in un oggetto File? Se no posso usare il Base64 e decodificarlo sul server. ma sono solo curioso – redestructa
L'oggetto FormData è compatibile con il cross browser? –
Si prega di chiarire: avete il percorso del file come una stringa o avete il contenuto del file come stringa e ti piacerebbe averlo caricato come un file? –
@Marko: Si legge come se avesse il contenuto del file in una stringa, ottenuto da una richiesta Ajax. –