Wenn Sie mehrere Online -Tutorials und die von Ihnen selbst erhaltenen Methoden kombinieren, ist es derzeit mit Google, IE11 und IE10 kompatibel.
Der Inhalt im HTMLBody ist nichts Besonderes.
<div id = "dConfirm"> <p style = "float: links; margin-links: 20px; margin-top: 20px"> <form action = "javaScript: uploadandSubmit ();" name="demoForm" id="demoForm" method="post" enctype="multipart/form-data"><p>Upload file: <input type="file" name="file" id="str_file"/></p><p><input type="submit" value="upload" /></p></form></p></div>
Binärdateien lesen:
Funktion uploadandSubmit () {Dateiname = document.getElementById ("str_file"). val; var form = document.forms ["DemoForm"]; if (fileName! FileReader (); Reader.ReadAsBinaryString (Datei); // Dies wird asynchroner reader.onloadend = function () {// nach dem Lesen abgeschlossen, if (reader.error) {console.log (reader.error);} else {UploadSubmit 2 (readers.result);}}} var bf1 = New (Reader.Result). BinaryFile (Dateiname); // Dieser Messwert ist synchronisiert UploadandSubmit2 (bf1.readall ());}}Hier müssen wir ein Urteil über den Browsertyp machen. Wenn es sich nicht um den IE handelt, verwenden Sie FileReader zum Lesen und verwenden Sie es, wenn es sich um IE handelt, die ActiveX -Steuerung zum Lesen. Hier gibt es eine Grube. Obwohl IE11 und IE10 die FileReader -Objektmethode nicht unterstützen, ist der "TypeOf FileReader" von IE11 und IE10 nicht "undefiniert", und es ist schwierig, den Browser direkt danach zu unterscheiden, ob es FileReader unterstützt. Es ist auch zu beachten, dass die FileReader -Methode darin besteht, Dateien asynchron zu lesen, und ActiveX ist das Lesen von Dateien synchron. Ich habe nie herausgefunden, wie diese beiden Routen in einer Methode verkapselt werden. Ich frage mich, ob es eine gute Lösung für Sie gibt.
Unter ihnen wird die Baumethode des Binary-Datei-Objekts von http://www.codeprroject.com/articles/17825/reading-and-writing-binary-files-using-jscript?msg=3718403#xx3718403xx Technology auszugteil. Die Antwort des Blogs enthält eine Verbesserungsmethode. Es wird gesagt, dass es effizienter ist, aber weil ich es nicht verstanden habe, habe ich die ursprüngliche Methode gewählt.
Die ursprüngliche Methode ist lang:
// Bei der Verwendung der Steuerung von adodb.stream achten Sie auf die Konvertierung zwischen ISO-8859-1 und Windows-1252-Zeichensatzfunktion. Codepage = '437'; this.path = name; var Forward = new Array (); var rückwärts = new Array (); // Hinweis - Für eine bessere Leistung sollte ich diese Hex // Definitionen in dezimal vorkonvertieren: '00e2'; vorwärts ['84 '] =' 00e4 '; vorwärts ['85'] = '00e0'; Vorwärts ['86 '] =' 00e5 '; vorwärts ['87'] = '00e7'; vorwärts ['88 '] =' 00ea '; = '00ef'; vorwärts ['8c'] = '00ee'; vorwärts ['8d'] = '00ec'; vorwärts ['8e'] = '00c4'; vorwärts ['8f'] = '00c5'; vorwärts ['90 '] =' 00C9 '; '00F4'; vorwärts ['94 '] =' 00f6 '; Forward ['95'] = '00F2'; Vorwärts ['96 '] =' 00fb '; vorwärts ['97'] = '00f9'; vorwärts ['98 '] =' 00ff '; = '00A2'; Vorwärts ['9C'] = '00A3'; Vorwärts ['9d'] = '00A5'; Vorwärts ['9E'] = '20a7'; vorwärts ['9f'] = '0192'; Vorwärts ['A0'] = '00E1'; = '00fa'; Forward ['A4'] = '00F1'; Vorwärts ['A5'] = '00D1'; Vorwärts ['A6'] = '00aa'; vorwärts ['A7'] = '00BA'; Vorwärts ['A8'] = '00BF'; '00bd'; vorwärts ['ac'] = '00bc'; vorwärts ['ad'] = '00A1'; Vorwärts ['ae'] = '00ab'; vorwärts ['af'] = '00BB'; vorwärts ['B0'] = '2591'; '2502'; vorwärts ['b4'] = '2524'; vorwärts ['b5'] = '2561'; vorwärts ['b6'] = '2562'; vorwärts ['B7'] = '2556'; Vorwärts ['B8'] = '2555'; '2557'; vorwärts ['bc'] = '255d'; vorwärts ['bd'] = '255c'; vorwärts ['be'] = '255b'; vorwärts ['bf'] = '2510'; vorwärts ['c0'] = '2514'; vorwärts ['c1'] = '2534'; '251c'; vorwärts ['c4'] = '2500'; vorwärts ['c5'] = '253c'; vorwärts ['c6'] = '255e'; vorwärts ['c7'] = '255f'; vorwärts ['c8'] = '255a'; Vorwärts ['C9'] = '2554'; '2566'; vorwärts ['cc'] = '2560'; vorwärts ['CD'] = '2550'; Vorwärts ['CE'] = '256c'; Vorwärts ['cf'] = '2567'; Vorwärts ['d0'] = '2568'; Vorwärts ['D1'] = '2564'; '2559'; vorwärts ['d4'] = '2558'; vorwärts ['d5'] = '2552'; vorwärts ['d6'] = '2553'; vorwärts ['d7'] = '256b'; vorwärts ['d8'] = '256a'; '2588'; vorwärts ['dc'] = '2584'; vorwärts ['dd'] = '258c'; vorwärts ['de'] = '2590'; vorwärts ['df'] = '2580'; vorwärts ['e0'] = '03b1'; Forward ['E1'] = '00df'; '03c0'; vorwärts ['e4'] = '03a3'; vorwärts ['e5'] = '03c3'; vorwärts ['e6'] = '00b5'; vorwärts ['e7'] = '03c4'; vorwärts ['e8'] = '03a6'; = '03b4'; vorwärts ['ec'] = '221e'; vorwärts ['ed'] = '03c6'; vorwärts ['ee'] = '03b5'; vorwärts ['ef'] = '2229'; vorwärts ['f0'] = '2261'; Forward ['F1'] = '00B1'; '2264'; Vorwärts ['f4'] = '2320'; Vorwärts ['f5'] = '2321'; Vorwärts ['f6'] = '00f7'; vorwärts ['f7'] = '2248'; vorwärts ['f8'] = '00B0'; Vorwärts ['f9'] = '2219'; '221a'; vorwärts ['fc'] = '207f'; vorwärts ['fd'] = '00b2'; vorwärts ['fe'] = '25a0'; vorwärts ['ff'] = '00a0'; rückwärts ['c7'] = '80'; rückwärts ['fc'] = '81'; '83'; rückwärts ['e4'] = '84'; rückwärts ['e0'] = '85'; rückwärts ['e5'] = '86'; rückwärts ['e7'] = '87'; rückwärts ['EA'] = '88'; rückwärts ['eb'] = '89'; '8b'; rückwärts ['ee'] = '8c'; rückwärts ['ec'] = '8d'; rückwärts ['c4'] = '8e'; rückwärts ['c5'] = '8f'; rückwärts ['c9'] = '90'; rückwärts ['E6'] '93'; rückwärts ['f6'] = '94'; rückwärts ['f2'] = '95'; rückwärts ['fb'] = '96'; rückwärts ['f9'] = '97'; rückwärts ['ff'] = '98'; rückwärts ['d6'] = '99'; '9b'; rückwärts ['a3'] = '9c'; rückwärts ['a5'] = '9d'; rückwärts ['20a7'] = '9e'; rückwärts ['192'] = '9f'; rückwärts ['e1'] = 'A0'; rückwärts ['ed'] = 'A1'; 'A3'; rückwärts ['f1'] = 'a4'; rückwärts ['d1'] = 'a5'; rückwärts ['aa'] = 'a6'; rückwärts ['ba'] = 'a7'; rückwärts ['bf'] = 'A8'; rückwärts ['2310'] = 'A9'; 'AB'; rückwärts ['bc'] = 'ac'; rückwärts ['A1'] = 'ad'; rückwärts ['ab'] = 'ae'; rückwärts ['bb'] = 'af'; rückwärts ['2591'] = 'b0'; rückwärts ['2592'] = 'B1'; 'B3'; rückwärts ['2524'] = 'b4'; rückwärts ['2561'] = 'b5'; rückwärts ['2562'] = 'B6'; rückwärts ['2556'] = 'B7'; rückwärts ['2555'] = 'B8'; Backward ['2563' = 'B9'; = 'Bb'; rückwärts ['255d'] = 'bc'; rückwärts ['255c'] = 'Bd'; rückwärts ['255b'] = 'be'; rückwärts ['2510'] = 'bf'; rückwärts ['2514'] = 'C0'; rückwärts [2534 '] =' C1 '; = 'C3'; rückwärts ['2500'] = 'c4'; rückwärts ['253c'] = 'c5'; rückwärts ['255e'] = 'C6'; rückwärts ['255f'] = 'c7'; rückwärts ['255a'] = 'C8'; rückwärts ['2554'] = 'C9'; = 'Cb'; rückwärts ['2560'] = 'cc'; rückwärts ['2550'] = 'CD'; rückwärts ['256c'] = 'CE'; rückwärts ['2567'] = 'cf'; rückwärts ['2568'] = 'D0'; 'D3'; rückwärts ['2558'] = 'd4'; rückwärts ['2552'] = 'd5'; rückwärts ['2553'] = 'd6'; rückwärts ['256b'] = 'd7'; rückwärts ['256a'] = 'd8'; rückwärts [2518 '] =' 22 '; = 'Db'; rückwärts ['2584'] = 'dc'; rückwärts ['258c'] = 'dd'; rückwärts ['2590'] = 'de'; rückwärts ['2580'] = 'df'; rückwärts ['3B1'] = 'E0'; rückwärts ['df' = 'actward'; = 'E3'; rückwärts ['3a3'] = 'e4'; rückwärts ['3c3'] = 'e5'; rückwärts ['b5'] = 'e6'; rückwärts ['3c4'] = 'e7'; rückwärts ['3a6'] = 'E8'; rückwärts ['398'] = '; = 'EB'; rückwärts ['221e'] = 'ec'; rückwärts ['3c6'] = 'ed'; rückwärts ['3b5'] = 'ee'; rückwärts ['2229'] = 'ef'; rückwärts ['2261'] 'F3'; rückwärts ['2320'] = 'f4'; rückwärts ['2321'] = 'f5'; rückwärts ['f7'] = 'f6'; rückwärts ['2248'] = 'f7'; rückwärts ['b0'] = 'f8'; 'Fb'; rückwärts ['207f'] = 'fc'; rückwärts ['b2'] = 'fd'; rückwärts ['25a0'] = 'fe'; rückwärts ['a0'] = 'ff'; var hd = "0123456789abcdef"; {d >> = 4; h = hd.substr (d & 15,1)+H;} return h;} th2d = Funktion (h) {return parseInt (h, 16);} this.writeAll = Funktion (was) {// Stream -Objekt // var binarystream = wscript.create.createObject ("adodb.Stream"). ActiveXObject ("adodb.stream"); // Stream -Typ angeben - Wir betrügen und erhalten String, aber 'wie' BinaryBinaryStream.Type = adtyPext; binarystream.charset = '437'; // Öffnen Sie den StreamBinaryStream.open (); // Schreiben Sie in die Streambream.writETETTEXT (FORWARDEWARD47 (WAS). diskbinarystream.savetofile (this.path, adSeVecreateOverwrite); // Clearn upBinaryStream.close ();} this.readall = function () {// Stream -Objekt erstellen - braucht Ado 2.5 oder hEYGY // Var Binarystream = Wscript.create ("adodb.") variarystream = newn News. ActiveXObject ("adodb.stream"); // Stream -Typ angeben - Wir betrügen und erhalten String, aber 'wie' BinaryBinaryStream.Type = AdtyPoText; binarystream.charset = Codepage; // Öffnen Sie den StreamBinarystream.open (); // Die Dateidaten von der Diskette von Diskette auf Stream -Objector -Stream -Stream -Stream -Stream -Stream -Stream -Stream -Stream -Stream -Stream -Stream -Stream -Stream -Stream -Stream -Stream -Stream -Stream -Stream -Stream -Stream -Stream -Stream -Stream -Stream -Stream -Stream -Stream -Stream -Stream -Stream -Stream -Stream -Stream -Stream (laden Sie das Streamstream. ObjectVar What = BinaryStream.Readtext; // Aufbindungsstream.CLOSE (); Return this.backward437 (Was);}/ * eine Oktettsnummer in einen Code konvertieren. CC; var H; für (; i <l; ++ i) {c ++; if (c == 128) {Encarray.push (tmp); tmp = ''; Code (cc);} else {h = this.d2h (cc); H = Forward [''+H]; tmp+= string.fromCharCode (this.h2d (h));}} if (tmp! Diese Schleife progressive verkündet die // Array -Elemente enttil. c = 0; c <l; c+= 2) {if (c+1 == l) {ar2.push (Encarray [c]);} else {ar2.push ('+Encarray [c]+Encarray [c+1]);}} Encarray = ar2; Ar2 = New Array (); Nummer*/this.backward437 = Funktion (instring) {var encarray = new Array (); var tmp = ''; var i = 0; var c = 0; var l = länge; var cc; var var H; für (; i <l; ++ i) {c ++; if (c == 128) {Encarray.push (tmp); tmp = ''; ode (cc);} else {h = this.d2h (cc); h = rückwärts [''+h]; tmp+= string.fromCharCode (this.h2d (h));}} if (tmp! = '') {Encarray.push (tmp);} /// Diese Schleife progressive verkündet die // Array -Elemente enttil. c=0;c<l;c+=2){if(c+1==l){ar2.push(encArray[c]);}else{ar2.push(''+encArray[c]+encArray[c+1]);}}encArray=ar2;ar2=new Array();}return encArray[0];}}Der Hauptteil ist:
this.Readall = function () {// Erstellen von Stream -Objekt - benötigt ADO 2.5 oder Heighter // var binarystream = wscript.createObject ("adodb.stream") var binarystream = new ActivexObject ("adodb.stream"); // Spezifizierende Streamtyp - wir schummeln und adydarySchary. Codepage; // Öffnen Sie den StreamBinaryStream.open (); // Die Dateidaten von der Festplatte zu Stream -ObjectBinaryStream.loadfromFile (this.Path); // den Stream öffnen und binär 'String' aus dem ObjectVar What = Binarystream.Readtext; // Upperary.close ();Hier ist die Methode zum Lesen von Dateien mit der Steuerung "adodb.stream". Sie können sehen, dass der vom Autor verwendete Lesestyp adtyPext (2) ist, bei dem Binärdateien mit Text lesen! Nachdem Sie das Dokument in ADTYPEBINY (1) geändert haben, kann ich nichts lesen, ich weiß nicht warum.
Der Rest des Codes erledigt Coding Conversion -Arbeit. Im Allgemeinen müssen Sie beim Lesen von Dateien den Zeichensatz "ISO-8859-1" verwenden. Wenn Sie Dateien mit HTTP senden, müssen Sie den Zeichensatz "Windows-1252" verwenden. Es gibt nur wenige numerische Zeichen in diesen beiden Zeichensätzen, sodass Sie die verschiedenen Teile in den Lesedaten finden, um sie in eine andere Zeichensatz -Darstellung einzeln umzuwandeln.
Ajax sendet einen binären Strom:
Funktion uploadandSubMit2 (binärer Bereich) {url = urlhead + "cook.ashx"; xmlhttp = new xmlhttpRequest (); xmlhttp.open ("post", url + "? encodeURIComponent(filename.split("//")[filename.split("//").length-1]));//IE process Chinese characters urlxmlHttp.sendAsBinary(BinaryContent);xmlHttp.onreadystatechange = function (){if (xmlHttp.readyState == 4) {if (xmlhttp.status == 200) {var str = xmlhttp.response; alert (str); xmlhttp.abort ();}}}}}Für die binäre Übertragung gibt es kein "Fenster.ActiveXObject (" msxm12.xmlhttp ") und" window.activeXObject ("microsoft.xmlhttp") "kompatibel mit der alten Version von IE. Ich frage mich, ob Sie Binärübertragungsmethoden haben, die diese beiden ActiveX -Steuerelemente unterstützen.
In einem Tutorial befindet sich Zeile sechs davor:
xmlhttp.overridemimetype ('text/plain; charset = x-user-definiert'); //: X-User-Defined fordert dem Browser an, die zurückgegebenen Daten nicht zu analysieren
Nach dem Hinzufügen dieser Zeile analysiert der Browser das Codierungsformat der im Hintergrund zurückgegebenen Daten nicht. Insbesondere wird der in den Vordergrund zurückgegebene chinesische Text als "" oder "Port" angezeigt. Ich denke, der Autor empfängt Binärdaten, die aus dem Backend im Vordergrund übertragen werden.
In der Tat unterstützt nur Firefox -XMLHTTPREQUEST die SendaSbinary -Methode. Um es unter IE und Google zu verwenden, müssen Sie XMLHTTPrequest eine Prototypmethode hinzufügen:
// Binäre Sendungsfunktion zum Prototyp von xmlhttprequest xmlhttprequest.Prototype.SendaSbinary = Funktion (DataStr) {Funktion bytevalue (x) {return x.charcodeat (0) & 0xff;} var ordds = aray.prototype.map.codeat (0xff;} vards = array.prototype.map.map.CALL). Uint8Array (ords); this.send (ui8a.buffer);}Ich verstehe den Code hier nicht sehr gut. Die sechste Zeile IE8 unterstützt es nicht und die siebte Zeile IE9 unterstützt sie nicht.
Der Hintergrund verwendet Java Serverlet, und das Folgende ist der Code der endgültigen Java -Klasse:
public String fileUpload (httpServletRequest-Anforderung) löst IOException {request.setcharactercoding ("utf-8"); bufferedInputStream-Dateiin = new BufERDInputStream (Request.GetInputStream ()) aus; String fn = request.getParameter ("Dateiname"); byte [] buf = neues byte [1024]; Datei Datei = neue Datei ("d:/" + fn); BufferedOutputStream FileOut = new bufferedOutputStream (neuer FileOutputStream (Datei)); try {while (true) {// Daten int bytesin = fileIn.read (buf, 0, 1024); System.out.println (Bytesin); if (bytesin == -1) {break; } else {FileOut.Write (buf, 0, bytesin); }} fileout.flush (); return ("erfolgreich speichern");} catch (Ausnahme e) {return "speichern, fehlgeschlagen, Grund:"+e.ToString ();} endgültig {FileOut.close (); }}Das obige ist die Methode zum Lesen von Binärdateien in JavaScript und der Übertragung von Binärströmen mit AJAX, die ich Ihnen vorgestellt habe. Ich hoffe, es wird Ihnen hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird Ihnen rechtzeitig antworten. Vielen Dank für Ihre Unterstützung auf der Wulin.com -Website!