Come caricare la stringa come file con jQuery o altri framework js

L’uso di javascript, ho un file in una stringa (ottenuto con la richiesta ajax).

Come caricare le immagini come file server da un’altra richiesta ajax ?

  • Si prega di chiarire: hai percorso del file come una stringa o voi avete un file di contenuti come stringa e si vorrebbe avere caricato un file?
  • Si legge come egli è il contenuto del file in una stringa, che ha ottenuto da una richiesta ajax.
InformationsquelleAutor Romka | 2010-06-10

 

2 Replies
  1. 16

    È necessario impostare il Content-type intestazione della richiesta multipart/form-data e giocare con il formato un po’, Ho scritto questo in Pianura Ol’ JavaScript ™, ma si potrebbe facilmente apportare modifiche per una libreria:

    EDIT: era il mio caffè, così modificato jQuery (no versione della libreria qui):

    //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.
    • Certo. Utile se non si ha il controllo sul server che si sta caricando e si deve accettare un file di testo inviato con multipart/form-data.
    • Questo ha funzionato, tranne che per due regolazioni di lavorare con express/nodo: 1) l’ultimo confine deve essere + '--'+boundary+ '--'; e anche il contentType nella chiamata ajax deve essere: "multipart/form-data; boundary="+boundary
    • questo è necessario anche per le Guide. Grazie, appena mi ha salvato un paio di ore di debug
  2. 15

    Ecco come farlo senza costruzione manuale di multi-parte corpo della richiesta:

    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 bello… posso transcode Base64 per un Oggetto File? Se non posso usare il base64 e decodificare il file sul server. ma sono solo curioso
    • È FormData oggetto cross browser compatibile?
    • Sto usando Dropzone, ma questa risposta opere per convertire una stringa in un file per l’upload(“nuovo File([nuovo Blob([s])], filename)”).

Lascia un commento