Da wir Bilder hochladen möchten, müssen wir zunächst feststellen, ob es sich um eine herunterladbare Bildressource handelt. Manchmal können wir reguläre Ausdrücke verwenden, aber es ist schwierig festzustellen, ob es herunterladbar ist. Es ist auch schwierig festzustellen, ob nach dem Bildlink ein Suffix steht. Einige Bilder haben kein Suffix, aber wenn diese Einschränkung aufgehoben wird, ist es leichter, sie anzugreifen. Daher verwenden wir hier Image als Beurteilungsmethode. Wenn das Bild erfolgreich geladen wurde, bedeutet dies, dass es sich tatsächlich um ein Bild handelt und heruntergeladen werden kann. // Prüfen, ob der Link auf ein Bild verweist und heruntergeladen werden kann export const checkImgExists = (imgurl: string) => { returniere neues Promise(Funktion (auflösen, ablehnen) { var ImgObj = neues Bild(); ImgObj.src = imgurl; ImgObj.onload = Funktion (Res) { Entschlossenheit (res); }; ImgObj.onerror = Funktion (Fehler) { ablehnen(fehler); }; }); }; // wie man es benutzt checkImgExists(imgLink) .then(() => { // mach etwas mit imgLink Konsole.log(imgLink); }) .catch((err) => { // ein Protokoll oder Alarm console.log(fehler); console.log("Leider kann dieser Link das Bild nicht abrufen"); }); Nach der Entscheidung müssen wir das Bild herunterladen. Hier verwenden wir XMLHttpRequest, um den Download anzufordern, und das heruntergeladene Bild ist ein Blob-Objekt. Blob selbst kann in ein FormData-Objekt oder ein File-Objekt konvertiert werden. Wir können die Upload-Strategie entsprechend der spezifischen Situation unseres Projekts wählen. Wenn wir es auf OSS hochladen möchten, können wir es in ein File-Objekt konvertieren. Wenn wir es auf unseren eigenen Server übertragen möchten, können wir Ajax verwenden und Blob zum Hochladen in FormData konvertieren. // Machen Sie eine XMLHttpRequest-Anfrage an das Bild im Bildlink und geben Sie ein Blob-Objekt zurück function getImageBlob(url: string) { returniere neues Promise(Funktion (auflösen, ablehnen) { var xhr = neue XMLHttpRequest(); xhr.open("abrufen", URL, wahr); xhr.responseType = "Blob"; xhr.onload = Funktion () { wenn (dieser.status == 200) { lösen(diese.Antwort); } }; xhr.onerror = ablehnen; xhr.senden(); }); } // Konvertiere das Blob-Objekt in ein Dateiobjekt const blobToFile = (blob: Blob, fileName: string) => { gibt ein neues Fenster zurück.Datei([Blob], Dateiname, {Typ: Blob.Typ}); }; // wie man es benutzt // Gibt ein File-Objekt zurück, das für Upload-Operationen verwendet werden kann getImageBlob(src).then(async (res: any) => { const srcSplit = src.split("/"); const Dateiname = srcSplit[srcSplit.Länge - 1]; return blobToFile(res, Dateiname); }); Nachfolgend finden Sie eine kleine Demonstration des Hochladens von OSS. Da OSS viele private Informationen enthält, wird empfohlen, die Schnittstelle zu verwenden, um Informationen wie accessKeyId und accessKeySecret abzurufen, oder sogar temporäre Schlüssel zu verwenden. OSS von „ali-oss“ importieren; const ERROR_TIP = "Hochladen fehlgeschlagen!"; /** * Beispiel für das Hochladen einer Datei in OSS* Die relevanten accessKeyId, der Bucket und andere Parameter müssen entsprechend Ihrer OSS-Bibliothek ausgefüllt werden. * Es wird empfohlen, die beiden vertraulichen Informationen [accessKeyId, accessKeySecret] in eine Schnittstelle zum Abrufen oder Verschlüsseln zu integrieren. */ exportiere const uploadToOSS = async ( Dateiname: Zeichenfolge, Datei: Datei, accessKeyId: Zeichenfolge, accessKeySecret: Zeichenfolge, ...Requisiten ) => { let client = neues OSS({ endpoint, // Der OSS-Projektadress-Bucket, für den Sie sich beworben haben, // OSS-Objektträger accessKeyId, // Ihre accessKeyId bei OSS accessKeySecret, // Ihr accessKeySecret mit OSS intern: wahr, ...Requisiten, }); const putResult = warte auf Client.put(Dateiname, Datei, { Zeitüberschreitung: 60 * 1000 * 2, }); wenn (putResult.res.status === 200) { return { url: putResult.url, Dateiname }; } neuen Fehler werfen (ERROR_TIP); }; Wenn Sie Bilder auf Ihren eigenen Server hochladen möchten, können Sie die Datei im Blob-Format natürlich in das FormData-Format konvertieren und XMLHttpRequest oder Ajax zum Hochladen des Bildes verwenden. // Konvertiere das Blob-Objekt in ein FormData-Objekt const blobToFormData = (blob: Blob, fileName: string) => { const formdata = neue FormData(); formdata.append("Datei", Blob, Dateiname); Formulardaten zurückgeben; }; // XMLHttpRequest const uploadFile = (formData: FormData) => { const url = "Ihre_Schnittstelle"; let xhr = neue XMLHttpRequest(); xhr.onload = Funktion () { console.log("ok"); Konsole.log(JSON.parse(xhr.responseText)); }; xhr.onerror = Funktion () { console.log("Fehler"); }; xhr.open("Beitrag", URL, wahr); xhr.send(formData); }; // Ajax const uploadFile2 = (formData: FormData) => { const url = "Ihre_Schnittstelle"; $.ajax({ URL (URL = URL = URL), Typ: "POST", Daten: Formulardaten, asynchron: falsch, Cache: falsch, Inhaltstyp: false, Prozessdaten: false, Erfolg: Funktion (Returndata) { Konsole.log(Daten zurückgeben); }, Fehler: Funktion (Returndata) { Konsole.log(Daten zurückgeben); }, }); }; In meinem vorherigen Backend-Projekt habe ich Express als statische Bildbibliothek verwendet. Nachfolgend sehen Sie meinen Knotencode zum Hochladen von Bildern. Es ist erwähnenswert, dass die JPG-Datei nach der Verwendung einer umfassenden Analyse direkt in Ihrem voreingestellten Fotoverzeichnis einen langen, zufälligen Namen hat. Tatsächlich habe ich hier auch einen kürzeren Namen zum Umbenennen verwendet. Sie können die Umbenennungsstrategie entsprechend Ihren Anforderungen auswählen. const express = erfordern("express"); const listenNumber = 5000; const app = express(); const bodyParser = erfordern("body-parser"); const http = require("http"); //Server erstellen const formidable = require("formidable"); const path = require("Pfad"); const fs = erfordern("fs"); app.use(express.static("../../upload")); app.use(bodyParser.urlencoded({ erweitert: false })); app.use(bodyParser.json()); //Daten JSON-Typ // Bild hochladen app.post("/upLoadArticlePicture", (req, res, next) => { let defaultPath = "../../upload/"; let uploadDir = path.join(__dirname, defaultPath); let form = neues formidable.IncomingForm(); let getRandomID = () => Zahl(Math.random().toString().substr(4, 10) + Date.now()).toString(36); form.uploadDir = uploadDir; //Cache-Verzeichnis für hochgeladene Dateien festlegen form.encoding = "utf-8"; //Bearbeitung festlegen form.keepExtensions = true; //Suffix beibehalten form.maxFieldsSize = 2 * 1024 * 1024; //Dateigröße form.parse(req, function (err, fields, files) { wenn (Fehler) { res.locals.error = Fehler; res.render("index", { title: TITEL }); zurückkehren; } let filePath = files.file["Pfad"]; let backName = filePath.split(".")[1]; let oldPath = filePath.split("\\")[filePath.split("\\").length - 1]; let newPath = `${getRandomID()}.${backName}`; fs.rename(Standardpfad + alter Pfad, Standardpfad + neuer Pfad, (err) => { wenn (!err) { neuerPfad = `http://localhost:${listenNumber}/${newPath}`; res.json({ flag: true, Pfad: neuerPfad }); } anders { res.json({ Flag: false, Pfad: "" }); } }); }); }); Dies ist das Ende dieses Artikels über die Implementierung von JavaScript-Download-Link-Bildern und deren Hochladen. Weitere verwandte JavaScript-Download-Link-Bilder und Hochladen von Inhalten finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
In MySQL verwenden wir häufig order by zum Sortie...
Wenn Sie nach der Kompilierung und Installation v...
Inhaltsverzeichnis 1. Arithmetische Operatoren 2....
MySQL-Escape Escape bedeutet die ursprüngliche Se...
Ohne weitere Umschweife werde ich den Code direkt...
Designspezifikationen für WeChat Mini-Programmkom...
Bei der Erstellung von Webseiten ist das Anzeigen...
Vererbung von Prototypketten Die Prototypenvererb...
Ergebnisse erzielen Implementierungscode html <...
Ursache Ich habe vor Kurzem mit der Umstrukturier...
Klassifizierung der Farbeigenschaften Jede Farbe ...
Früher hatte fast jede Website eine Sitemap-Seite...
1. Entpacken Sie die Datei in das aktuelle Verzei...
Installieren Sie MySQL 8.0 docker run -p 63306:33...
Inhaltsverzeichnis Vorwort Was ist ein Filter So ...