2016-06-13 5 views
0

Im Ajax in einer eckigen js-Umgebung, um eine lokale Datei (eine PDF-Datei) genannt zurückzukehren. Das Angerufene ist erfolgreich, aber die Daten, die vom Ajax-Aufruf zurückgegeben werden, sind in verstümmeltem Code (nicht sicher, ob ich hier den richtigen Begriff verwendet habe, aber es ist genauso wie das Öffnen einer PDF-Datei mit einem Texteditor). Gibt es trotzdem, dass ich das Rückgabeergebnis als Base64 String bekommen könnte?Ajax Aufruf, um PDF-Datei als Base64-String

Der Grund dafür ist, mit einigen der vorhandenen PDF zu verschmelzen, aber vorher würde ich die Base64-Zeichenfolge der PDF benötigen. Im Folgenden meine Ajax-Aufruf Code sind,

$.ajax({   
    url : 'path/to/pdfFile.pdf', 
    success : function(data) { 
     console.log(data); //expecting base64 string here 
    }, 
    error: function(xhr, textStatus, errorThrown){ 
     console.log('request failed'); 
    }, 
    async : false 
}); 
+0

Vielleicht kann dieser Ihnen helfen: http://stackoverflow.com/questions/7370943/retrieving-binary-file-content-using-javascript-base64-encode-it-and-reverse-de Es gibt eine Funktion zum Codieren einer Antwort in base64 in der angenommenen Antwort – DaTebe

+0

Hallo @DaTebe, ich habe versucht, die zurückgegebenen Daten von AJAX zu "base64ArrayBuffer" -Methode der Stapelüberlauf Antwort, die Sie erwähnen, gibt es ein "Invalid Array Length Argument", alles muss ich tun, bevor ich die Daten an die Methode übergebe? – Chris

+0

Hi @DaTebe, danke für den Guide, ich schaffe es in base64 umzuwandeln, ich werde jetzt die Antwort posten. – Chris

Antwort

1

ich es geschafft, die pdf-Datei (verstümmelt Code) auf eine Base64 Zeichenfolge zu konvertieren, sollte die richtige Definition Binärdatei base64 werden zu konvertieren.

Unten finden Sie die Antwort, dank @DaTebe und eine Referenz Antwort:

Retrieving binary file content using Javascript, base64 encode it and reverse-decode it using Python

Die Antwort,

  1. Zuerst schreiben zwei Methoden für die Umwandlung aus der referenzierten Antwort

    function base64Encode(str) { 
        var CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/"; 
        var out = "", i = 0, len = str.length, c1, c2, c3; 
        while (i < len) { 
         c1 = str.charCodeAt(i++) & 0xff; 
         if (i == len) { 
          out += CHARS.charAt(c1 >> 2); 
          out += CHARS.charAt((c1 & 0x3) << 4); 
          out += "=="; 
          break; 
         } 
         c2 = str.charCodeAt(i++); 
         if (i == len) { 
          out += CHARS.charAt(c1 >> 2); 
          out += CHARS.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4)); 
          out += CHARS.charAt((c2 & 0xF) << 2); 
          out += "="; 
          break; 
         } 
         c3 = str.charCodeAt(i++); 
         out += CHARS.charAt(c1 >> 2); 
         out += CHARS.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4)); 
         out += CHARS.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >> 6)); 
         out += CHARS.charAt(c3 & 0x3F); 
        } 
        return out; 
    } 
    
    function getBinary(file){ 
        var xhr = new XMLHttpRequest(); 
        xhr.open("GET", file, false); 
        xhr.overrideMimeType("text/plain; charset=x-user-defined"); 
        xhr.send(null); 
        return xhr.responseText; 
    } 
    
  2. Um es zu verwenden, gehen Sie einfach mit:

    var b = getBinary ('Pfad/zu/pdfFile.pdf');
    var b64 = base64Encode (b);
    console.log (b64);