In diesem Artikel wird der spezifische Code der Vue-Cropper-Komponente zur Implementierung des Bildausschneidens und -hochladens zu Ihrer Information bereitgestellt. Der spezifische Inhalt ist wie folgt In den letzten paar Tagen hatte ich etwas Freizeit und habe das Hochladen von Avataren mit Vue und Spring Boot geübt. Ich habe es also aufgeschrieben und hoffe, dass es für die zukünftige Entwicklung hilfreich sein wird. Einführung von Vue-Cropper in Vue1. Einführung in die Komponente importiere { VueCropper } von 'vue-cropper' Komponenten: VueCropper, }, 2. Globale Einführung Konfigurieren Sie den folgenden Code in main.js Importiere VueCropper von „vue-cropper“ Vue.use(VueCropper) 3. Anwendungsbeispiele VUE-Datei <Vorlage> <el-dialog Titel="Avatar bearbeiten" :visible.sync="dialogFormularSichtbar" :Schließen bei Klick-Modal="false" An den Hauptteil anhängen > <label class="btn" for="uploads">Wählen Sie ein Bild aus</label> <Eingabe Typ="Datei" id="Hochladen" :Wert="Bilddatei" Stil="Position:absolut; Clip:Rechteck(0 0 0 0);" akzeptieren="bild/png, bild/jpeg, bild/gif, bild/jpg" @change="uploadImg($event, 1)" > <div Stil="Margin-left:20px;"> <div Klasse = "show-preview" :style = "{'overflow': 'hidden', 'margin': '5px'}"> <div: style="Vorschau.div" Klasse="Vorschau" Stil="Breite: 40px;Höhe: 40px;"> <img :src="vorschau.url" :style="vorschau.img"> </div> </div> </div> <div Klasse="Schnitt"> <vueCropper ref="Beschneider" :img="Option.img" :Ausgabegröße="Option.Größe" :Ausgabetyp="Option.Ausgabetyp" :info="wahr" :full="Option.full" :kannVerschieben="Option.kannVerschieben" :kannBox verschieben="Option.kannBox verschieben" :original="Option.original" :autoCrop="Option.autoCrop" :autoCropWidth="Option.autoCropWidth" :autoCropHeight="Option.autoCropHeight" :fixedBox="Option.fixedBox" @realTime="Echtzeit" @imgLoad="imgLoad" ></vueCropper> </div> <div slot="Fußzeile" class="dialog-footer"> <el-button @click="dialogFormVisible = false" size="small">Abbrechen</el-button> <el-button Typ="primary" @click="finish('blob')" Größe="small">OK</el-button> </div> </el-dialog> </Vorlage> <Skript> importiere { VueCropper } von "vue-cropper"; Standard exportieren { Komponenten: VueCropper }, Daten() { zurückkehren { Vorschau: {}, Modell: falsch, Modellquelle: "", Dateiname: "", imgDatei: "", dialogFormVisible: false, Option: { img: "", outputSize: 1, //Bildqualität nach dem Schneiden (0,1-1) full: false, // Ausgabe des Originalbildanteils Screenshot Requisitenname full Ausgabetyp: "png", kannVerschieben: wahr, Original: falsch, canMoveBox: wahr, autoCrop: wahr, autoCropWidth: 40, autoCropHeight: 40, fixedBox: wahr } }; }, Methoden: { //Bild hochladen (auf die Schaltfläche „Hochladen“ klicken) fertig(Typ) { lass selft = dies; let formData = neue FormData(); // Ausgabewenn (Typ === "Blob") { selft.$refs.cropper.getCropBlob(data => { let img = window.URL.createObjectURL(Daten); selft.modell = wahr; selft.modelSrc = img; formData.append("Datei", Daten, selft.Dateiname); selft.$api.writer.userUpload(formData, r => { wenn (r.code) { selft.$alert.error(r.msg); } anders { selft.$message({ Nachricht: r.data.msg, Typ: „Erfolg“ }); selft.$store.state.userInfo = r.data.data; selft.dialogFormVisible = false; } }); }); } anders { dies.$refs.cropper.getCropData(data => {}); } }, //Wähle ein lokales Bild aus uploadImg(e, num) { console.log("Bild hochladen"); var selft = dies; //Bild hochladen var file = e.target.files[0]; selft.fileName = Dateiname; wenn (!/\.(gif|jpg|jpeg|png|bmp|GIF|JPG|PNG)$/.test(e.ziel.wert)) { alert("Der Bildtyp muss einer der folgenden sein: .gif, jpeg, jpg, png, bmp"); gibt false zurück; } var reader = neuer FileReader(); reader.onload = e => { Daten lassen; wenn (Typ von e.Ziel.Ergebnis === "Objekt") { // Array-Puffer in Blob konvertieren. Wenn es Base64 ist, ist es nicht erforderlich. data = window.URL.createObjectURL(new Blob([e.target.result])); } anders { Daten = e.Ziel.Ergebnis; } wenn (Zahl === 1) { selft.option.img = Daten; } sonst wenn (Zahl === 2) { selft.example2.img = Daten; } }; // In Base64 konvertieren // reader.readAsDataURL(Datei) // In Blob konvertieren Leser.readAsArrayBuffer(Datei); }, zeigen() { this.dialogFormVisible = true; }, // Echtzeitvorschaufunktion realTime(data) { console.log("Echtzeit"); this.previews = Daten; }, imgLoad(msg) { console.log("imgLoad"); Konsole.log(Nachricht); } } }; </Skript> <style lang="less"> @import "./userLogo.less"; </Stil> weniger Datei .schneiden { Breite: 300px; Höhe: 300px; Rand: 0px automatisch; } .hh { .el-dialog__header { Polsterung: 0px; Zeilenhöhe: 2; Hintergrundfarbe: #f3f3f3; Höhe: 31px; Rahmen unten: 1px durchgezogen #e5e5e5; Hintergrund: #f3f3f3; Rahmen oben links – Radius: 5px; Rahmen oben rechts – Radius: 5px; } .el-dialog__title { schweben: links; Höhe: 31px; Farbe: #4c4c4c; Schriftgröße: 12px; Zeilenhöhe: 31px; Überlauf: versteckt; Rand: 0; Polsterung links: 10px; Schriftstärke: fett; Textschatten: 0 1px 1px #fff; } .el-dialog__headerbtn { Position: absolut; oben: 8px; rechts: 10px; Polsterung: 0; Hintergrund: 0 0; Rand: keiner; Umriss: 0; Cursor: Zeiger; Schriftgröße: 16px; } } .btn { Anzeige: Inline-Block; Zeilenhöhe: 1; Leerzeichen: Nowrap; Cursor: Zeiger; Hintergrund: #fff; Rand: 1px durchgezogen #c0ccda; Farbe: #1f2d3d; Textausrichtung: zentriert; Box-Größe: Rahmenbox; Gliederung: keine; //Rand: 20px 10px 0px 0px; Polsterung: 9px 15px; Schriftgröße: 14px; Rahmenradius: 4px; Farbe: #fff; Hintergrundfarbe: #50bfff; Rahmenfarbe: #50bfff; Übergang: alle 0,2 s mühelos; Textdekoration: keine; Benutzerauswahl: keine; } .show-preview { biegen: 1; -webkit-flex: 1; Anzeige: Flex; Anzeige: -webkit-flex; Inhalt ausrichten: zentriert; -webkit-justify-content: zentrieren; .Vorschau { Überlauf: versteckt; Randradius: 50 %; Rand: 1px durchgezogen #cccccc; Hintergrund: #cccccc; } } Konfigurieren Sie den Inhaltstyp von Axios beim Senden einer Anfrage // HTTP-Anforderungs-Interceptor axios.interceptors.request.use( Konfiguration => {Debugger let token = sessionStorage.getItem('token') wenn (Token) { config.headers.Authorization = Token; } wenn (config && config.url && config.url.indexOf('upload') > 0) { config.headers['Inhaltstyp'] = 'multipart/Formulardaten' } Konfiguration zurückgeben }, err => { returniere Promise.reject(err) } ) Boot-Controller @RequestMapping("/hochladen") öffentliche ResultData-Upload(@RequestParam("Datei") MultipartFile-Datei) { gibt userService.upload(Datei) zurück; } Boot-Dienst @Überschreiben öffentlicher ResultData-Upload (MultipartFile-Datei) { wenn (!file.isEmpty()) { StringBuffer requestURL = sessionUtil.getRequestURL(); int end = requestURL.indexOf("/Benutzer/Upload"); String Basispfad = requestURL.substring(0, Ende); String SavePath = Basispfad + "/static/img/logo/"; // Dateinamen inklusive Suffix abrufen String fileName = file.getOriginalFilename(); String saveDbPath = savePath + Dateiname; // Unter diesem Pfad gespeichert: Dieser Pfad ist die statische Datei im Projektverzeichnis: (Hinweis: Möglicherweise müssen Sie diese Datei selbst erstellen.) // Der Grund für die Platzierung unter „statisch“ besteht darin, dass es statische Dateiressourcen speichert, d. h. der Zugriff ist möglich, indem die lokale Serveradresse eingegeben und der Dateiname über den Browser hinzugefügt wird. String path = ClassUtils.getDefaultClassLoader().getResource("").getPath() + "static/img/logo/"; // Diese Methode ist ein Wrapper zum Schreiben von Dateien. Importieren Sie in der Util-Klasse das Paket, um es zu verwenden. Die Methode wird später angegeben. try { FileUtil.fileupload(file.getBytes(), Pfad, Dateiname); // Erstellen Sie dann die entsprechende Entitätsklasse, fügen Sie den folgenden Pfad hinzu und schreiben Sie dann „User“ über die Datenbankoperationsmethode „user = sessionUtil.getSessionUser();“. Benutzer.setLogo(saveDbPath); Benutzer, wobei Benutzer = neuer Benutzer(); woUser.setId(user.getId()); ConfigHelper.update(Benutzer, "Benutzer", wobeiBenutzer); Map<String, Objekt> map = neue HashMap<>(); map.put("msg", "Avatar erfolgreich geändert"); map.put("Daten", Benutzer); gibt ResultData.ok(map) zurück; } Fang (IOException e) { log.error("Bild hochladen ==》" + e.getMessage()); e.printStackTrace(); returniere ResultData.failed(e.getMessage()); } Fang (Ausnahme e) { log.error("Letztes Bild ==》" + e.getMessage()); e.printStackTrace(); returniere ResultData.failed(e.getMessage()); } } anders { return ResultData.failed("Bild hochladen fehlgeschlagen"); } } Beenden Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird. Das könnte Sie auch interessieren:
|
<<: So führen Sie MySQL mit Docker-Compose aus
>>: So installieren Sie MySQL und MariaDB in Docker
Da wir eine Website erstellen wollten, enthielt d...
Textschatten Fügen Sie dem Text einen Schatten hi...
Inhaltsverzeichnis 1. let-Schlüsselwort 1.1 Grund...
In diesem Artikel wird der spezifische JS-Code zu...
Firefox, Opera und andere Browser unterstützen Web...
Dieser Artikel beschreibt, wie Sie den Chrome-Bro...
MySQL Zeile zu Spalte, Spalte zu Zeile Der Satz i...
Hintergrund Als ich vor einigen Tagen Paging in M...
1. Flex ist die Abkürzung für Flexible Box, was „...
Vorwort In diesem Artikel werden hauptsächlich di...
1: django-admin.py startproject Projektname 2: CD...
Heute habe ich eine Menüschaltfläche erstellt. Wen...
WeChat-Applet: Einfacher Rechner. Zu Ihrer Inform...
In diesem Artikel haben wir den Startvorgang von ...
1 Einleitung Wenn wir SQL-Anweisungen schreiben, ...