Eine Falle bei fileReaderWenn Sie fileReader zum Durchsuchen von Bildern verwenden, Verwenden des Base64-Formats var Datei = this.$refs.resource.files[0] var reader = neuer FileReader(); // Lesen Sie die Datei als DataURL: reader.readAsDataURL(Datei); //Der Rückruf-JS nach dem Lesen ist ein Multithread-Reader.onloadend=(e)=>{ } Javascript selbst ist Single-Threaded und hat keine asynchronen Funktionen. Da in Browsern JavaScript verwendet wird und der Browser selbst ein typischer GUI-Arbeitsthread ist, werden GUI-Arbeitsthreads in den meisten Systemen als Ereignisverarbeitung implementiert, um blockierende Interaktionen zu vermeiden, wodurch das asynchrone Gen von JavaScript entsteht. Alles, was danach geschah, hatte hier seinen Ursprung. Das stimmt: Netzwerk, Dateien. . . . Alle sind auf Basis von Browser-Schnittstellen implementiert Wenn dieselbe Datei zweimal gelesen wird, wird das Ereignis zum Abschluss des Ladevorgangs nicht ausgeführt. Fallstricke von FileReader unter iOS (Image zu Base64)Ich arbeite gerade an einem Projekt. Das Hochladen von Bildern ist eine sehr alte Funktion. Dann möchte ich das Bild komprimieren und direkt auf base64 hochladen... Der Code, den ich am Anfang verwendet habe var Dateiupload = Funktion (Objekt, Rückruf) { //Überprüfen Sie, ob der Browser das FileReader-Objekt unterstützt if (typeof FileReader == "undefined") { alert("Ihr Browser unterstützt das FileReader-Objekt nicht!"); } var Datei = Obj; //Beurteilen, ob der Typ ein Bild ist, wenn (!/image\/\w+/.test(file.type)){ alert("Bitte stellen Sie sicher, dass es sich bei der Datei um einen Bildtyp handelt"); gibt false zurück; } var reader = neuer FileReader(); reader.onload = Funktion (e) { var img = neues Bild, width = 95, //Bildgrößenänderungsbreite quality = 0.2, //Bildqualität canvas = document.createElement('canvas'), Schublade = Leinwand.getContext("2d"); img.src = dieses.Ergebnis; var scale = parseInt(Bildhöhe / Bildbreite); img.width=Breite; img.height = Breite * Maßstab; Leinwand.Breite = Bild.Breite; Leinwandhöhe = Bildhöhe; Schublade.drawImage(testimgId, 0, 0, Leinwandbreite, Leinwandhöhe); var base64 = canvas.toDataURL('image/jpeg', 0.2); konsole.log(base64); var image_base64 = img.src.replace("data:image/png;base64,",""); image_base64=URI-Komponente kodieren(image_base64); Alarm("19") //Rückruf aufrufen callback&&callback(img.src); } reader.readAsDataURL(Datei); } Der obige Code funktioniert auf PC und Android einwandfrei, gibt unter iOS jedoch eine feste Zeichenfolge mit Base64-Kodierung zurück, unabhängig davon, welches Bild Sie hochladen. Dann ändern... Nochmal ändern..... Verschiedene Dokumente anzeigen.. Weiter ändern... So wurde es schließlich gelöst Funktion getBase64(Dateiobjekt){ var Datei = Dateiobjekt, cvs = document.getElementById("Leinwand"), ctx = cvs.getContext("2d"); if(Datei){ var url = window.URL.createObjectURL(file); //PS: Nicht kompatibel mit IE var img = neues Bild(); img.src = URL; img.onload = Funktion(){ ctx.clearRect(0,0,cvs.Breite,cvs.Höhe); cvs.width = Bildbreite; cvs.height = img.height; ctx.drawImage(Bild,0,0,Bildbreite,Bildhöhe); var base64 = cvs.toDataURL("bild/png"); Rückruf (Base64); Alarm("20") } } } Das ist der Sinn des Teilens ... Der Grund ist, dass FileReader-Objekte unter iOS nicht unterstützt werden! Das Obige ist meine persönliche Erfahrung. Ich hoffe, es kann Ihnen als Referenz dienen. Ich hoffe auch, dass Sie 123WORDPRESS.COM unterstützen werden. Das könnte Sie auch interessieren:
|
<<: translate(-50%,-50%) in CSS erzielt horizontalen und vertikalen Zentrierungseffekt
>>: Eine kurze Diskussion über den Entwurf und die Optimierung von MySQL-Baumstrukturtabellen
Da das Distributionspaket von MySQL Community Ser...
Vorwort Das langsame Abfrageprotokoll ist eine se...
Ergebnisse erzielen Schritt 1. Ursprüngliche inde...
Beim insert into employee values(null,'張三'...
Inhaltsverzeichnis Bindungsklasse Inline-Stile bi...
Inhaltsverzeichnis 1. Was ist Dekonstruktion? 2. ...
Linux-Grundkonfiguration Kompilieren und installi...
In diesem Artikel wird der spezifische Code von V...
Der größte Teil dieses Artikels bezieht sich auf ...
Manche Webseiten erscheinen möglicherweise nicht g...
Tomcat7.0 legt virtuelles Verzeichnis fest (1) De...
Inhaltsverzeichnis Vorne geschrieben Was genau is...
Manchmal müssen wir Server stapelweise bedienen, ...
1. Gehen Sie zunächst auf die offizielle Website ...
1. Vorbereitung des Installationspakets VMware-pl...