Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2020
    Messaggi
    10

    Salvare in un file txt testo contenuti in un form (textarea o altri campi)

    in Javascript si può prendere il testo da un textarea, o dentro un tag e permettere all'utente di esportare in un file txt? Ovvimente il file in locale si scaricherà come un normale download. Se è posbbile senza l'utilizzo di librerie già pronte. Feazie.
    Ultima modifica di enricmar; 01-09-2021 a 15:43

  2. #2
    Utente di HTML.it L'avatar di ninja72
    Registrato dal
    May 2020
    residenza
    -
    Messaggi
    216
    lato client no, potresti farlo lato server con node, salvare il file sul server per poi restituirlo come file di download, oppure se stai creando un app desktop utilizzare electron (per operare con il file system locale).

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    1,346
    Ciao,
    probabilmente non ho capito cosa vuoi fare, ma a me non sembra impossibile farlo in javascript
    Una cosa del genere:
    codice:
    <textarea id='txtArea'>Ciao da U235!</textarea>
    ....
    
    var txtArea = document.getElementById('txtArea');
    var txt = txtArea.value;
    var fileB64 = window.btoa(txt);
    var saveFile = (function () {
                var a = document.createElement("a");
                document.body.appendChild(a);
                a.style = "display: none";
                return function (data, name) {
                    var blob = new Blob(data, { type: "octet/stream" }),
                        url = window.URL.createObjectURL(blob);
                    a.href = url;
                    a.download = name;
                    a.click();
                    window.URL.revokeObjectURL(url);
                };
            }());
    
    
    //trasformi in array di byte 
    var binFile = window.atob(fileB64);        
    var bytes = new Uint8Array(binFile.length);
    for (var i = 0; i < binFile.length; i++) {
      var ascii = binFile.charCodeAt(i);
      bytes[i] = ascii;
    }
    
    
    //fai aprire la finestra di download
    saveFile([bytes], 'test.txt');
    Qui un esempio funzionante in chrome.

    P.S.
    Volendo se si tratta di testo puoi anche non trasformarlo in base 64:
    codice:
    var txtArea = document.getElementById('txtArea');
    var txt = txtArea.value;
    var saveFile = (function () {
                var a = document.createElement("a");
                document.body.appendChild(a);
                a.style = "display: none";
                return function (data, name) {
                    var blob = new Blob(data, { type: "octet/stream" }),
                        url = window.URL.createObjectURL(blob);
                    a.href = url;
                    a.download = name;
                    a.click();
                    window.URL.revokeObjectURL(url);
                };
            }());
    
    
    //trasformi in array di byte  
    var bytes = new Uint8Array(txt.length);
    for (var i = 0; i < txt.length; i++) {
      var ascii = txt.charCodeAt(i);
      bytes[i] = ascii;
    }
    
    
    //fai aprire la finestra di download
    saveFile([bytes], 'test.txt');
    Ultima modifica di U235; 01-09-2021 a 19:18

  4. #4
    Utente di HTML.it L'avatar di ninja72
    Registrato dal
    May 2020
    residenza
    -
    Messaggi
    216
    Sorry, ho capito male io pensando che si dovesse operare a livello di filesystem.
    Tornando a noi, per un discorso di compatibilità con i browser vecchi e nuovi sarebbe più propenso l'utilizzo di "encodeURIComponent" anzichè "blob".


    codice:
    <form>
            <textarea id='txtArea'>Ciao mondo!</textarea>
            <button id='save' type="submit">Salva</button>
        </form>
    
        <script>
            const txtArea = document.getElementById("txtArea").value
            const link = document.createElement('a')
            const save = document.getElementById('save')
    
            link.setAttribute('href', `data:text/plain;charset=utf-8,${encodeURIComponent(txtArea)}`)
            link.download = `text.txt`
    
            save.addEventListener('click', (e) => {
                e.preventDefault()
                document.body.appendChild(link)
                link.click()
                document.body.removeChild(link)
            })
        </script>

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2021 vBulletin Solutions, Inc. All rights reserved.