typescript - Πώς να αποθηκεύσετε ένα κείμενο σε αρχείο και να το διαβάσετε ξανά αλλά να το αποθηκεύσετε ως δυαδικό σε javascript


Φτιάχνω έναν αποθηκευτή αρχείων από ένα string χρησιμοποιώντας το FileSaver.js από μια ερώτηση στο SO

let byteChars = atob("my string");
let byteNumbers = new Array(byteChars.length);
for (var i = 0; i < byteChars.length; i++) {
  byteNumbers[i] = byteChars.charCodeAt(i);
}
let byteArray = new Uint8Array(byteNumbers);
var data:Blob = new Blob([byteArray], {type: "application/octet-stream"});
var filename:string = filename + '.myext';
saveAs(data, filename, true);

Τότε πρέπει να το διαβάσω ξανά σε "my string" χρησιμοποιώντας το FileReader του Javascript:

let fr = new FileReader();
fr.onload = (e:FileReaderEvent) => {
    let result:any = e.target.result;
    //I don't know what I have to do with this type of data to get "my string" back
    };
fr.readAsBinaryString(file);

Απάντηση #1

Επεξεργασία, Ενημερωμένο

γράψε αρχείο

let byteChars = atob("my string");
let byteNumbers = new Array(byteChars.length);
for (var i = 0; i < byteChars.length; i++) {
  byteNumbers[i] = byteChars.charCodeAt(i);
}
let byteArray = new Uint8Array(byteNumbers);
var data = new Blob([byteArray], {type: "application/octet-stream"});
saveAs(data, "myfile.abc");

διάβασε αρχείο

<input type="file">
<script>
 var reader = new FileReader();
 reader.addEventListener("load", function(e) {
   document.body.innerHTML += "<br>" + btoa(e.target.result);
 });
  document.querySelector("input[type=file]")
  .addEventListener("change", function(e) {
     reader.readAsBinaryString(e.target.files[0])
  })
</script>

plnkr http://plnkr.co/edit/0KVhXnd0JpysplDLcAlC?p=preview

Μπορείτε να χρησιμοποιήσετε TextEncoder(), TextDecoder() ή FileReader(), .readAsBinaryString()

var str = "my string";
var encoder = new TextEncoder();
var encodedBytes = encoder.encode(str);
// do file save stuff
var decoder = new TextDecoder();
var decodedBytes = decoder.decode(encodedBytes);

console.log(encodedBytes, decodedBytes);

// alternatively, using `FileReader()`
var reader = new FileReader();
reader.onload = function() {
  console.log("FileReader result:", reader.result)
}
reader.readAsBinaryString(new Blob([encodedBytes]))