Ausgabe
In meiner Angular/Ionic-App habe ich eine große Namensliste und muss prüfen, ob das entsprechende Bild existiert. Denn manchmal versenden wir das Bild mit der App, aber manchmal finden wir das Bild später und stellen es einfach auf unseren Server, damit wir die App nicht nur für ein Bild erneut einreichen müssen.
<ion-item collection-repeat="item in prodataSelect | orderBy:data.sort | filter: data.selectBrand.brand:true | filter: data.selectName.name | filter: generalSearchFunc | filterObj:['brand','modelStrict']" item-width="25%" item-height="35%" item-render-buffer="8">
<a class="optionfuninit item-content">
<div class="imagebox">
<img class="imageoptionsmodel " ng-src="{{imagesUrls[item.imageName]}}" />
</div>
</a>
</ion-item>
Ich prüfe zuerst, ob das Bild lokal existiert (in der App), wenn nicht, prüfe ich, ob es auf unserem Server existiert (http://…) und wenn nicht, verwende ich ein Standardbild (default.png).
Ich überprüfe mit diesem Angular-Dienst:
.service('UrlExists', [
'$http',
'$q',
function ($http, $q) {
'use strict';
this.f = function (url) {
var http;
//UrlExistsDeferred = $q.defer();
try {
http = new XMLHttpRequest();
http.open("HEAD", url, false); //false is synchronous
http.send();
} catch (err) {
console.log("An error on the XMLHttpRequest:" + err.name + "---" + err.message);
}
if (http.readyState === 4) {
if (http.status === 200) {
//UrlExistsDeferred.resolve();
return true;
} else {
//UrlExistsDeferred.reject();
return false;
}
}
//return UrlExistsDeferred.promise;
};
Aber das Problem ist, dass ich viele 404-Fehler in der Konsole erhalte, und das ist sehr ärgerlich.
Haben Sie eine bessere Idee?
Lösung
Ja, ich habe eine bessere Idee. Sie könnten eine API-Funktion auf dem Server erstellen, die einen URL-Post-Parameter übernimmt, prüft, ob er auf dem Server vorhanden ist, und 1 zurückgibt, wenn er vorhanden ist, und 0, wenn er nicht vorhanden ist. Auf der Client-Seite könnten Sie POST-Anforderungen an diese API-Funktion senden und die zu überprüfende(n) URL(s) übergeben. Stellen Sie sicher, dass Sie keinen Fehler auf dem Server generieren, wenn die Datei nicht existiert.
BEARBEITEN
Es gibt sehr gute Tutorials zum Erstellen von RESTful-APIs in PHP, daher werde ich auf ihre detaillierte Beschreibung verzichten und Ihnen nur sagen, dass Sie einige wollen class
, die einige haben, function
und Sie möchten in der Lage sein, die class
s function
über Reflektion aufzurufen . Wenn Sie mit der Implementierung mehr oder weniger fertig sind, sollten Sie es mit PHP testen. Versuchen Sie sicherzustellen, dass Sie eine haben function
, die eine Zeichenfolge für den Methodennamen verwendet, und rufen Sie die Methode basierend auf dieser Zeichenfolge auf. Sie benötigen dies, wenn die Clientseite Befehle sendet. Wenn Sie mit dem Testen des PHP-Teils fertig sind, müssen Sie die clientseitige Verwendung implementieren. Es ist ratsam, eine Kommunikation aufzubauen, wo Sie Nachrichten wie senden könnten
Check/IsURLExistent
an den Server und übergeben Sie die URL als POST-Parameter. Behalten Sie jedoch immer die Sicherheit im Auge und lassen Sie niemals Dinge zu, die gefährlich sein könnten. Wenn Sie beispielsweise eine erstellen function
, um Bilder zu entfernen, müssen Sie überprüfen, ob der Benutzer über die erforderlichen Berechtigungen dazu verfügt, da böswillige Personen POST-Nachrichten an Ihre API senden, um zu versuchen, Daten von Ihnen zu stehlen oder die Integrität Ihrer API zu beeinträchtigen Seite? ˅.
Auf der Serverseite benötigen Sie diese Funktionalität in Ihremclass
public function IsURLExistent($params) {
return (file_exists($params["URL"]) ? 1 : 0);
}
und rufe diese auf function
. Wenn Sie auf der Clientseite 1 erhalten, existiert die Datei, wenn Sie 0 erhalten, existiert sie nicht. Möglicherweise möchten Sie den Pfad in der URL überprüfen, damit Programmierer nicht an anderen Stellen über die API-Funktion nach Dateinamen fragen. Grundsätzlich sind Teile der in dieser Antwort geschriebenen Dinge wahrscheinlich klar, andere Teile sind für Ihren aktuellen Wissensstand wahrscheinlich unklar. Wenn Sie sich jedoch die Zeit nehmen, ein paar Tutorials zu studieren, die hier verlinkt oder hier nicht verlinkt sind, dann wird Ihnen die Implementierung einer solchen API sehr leicht fallen. Vergessen Sie nicht, dieses Studium wird nicht umsonst sein, da es Ihren Status als Programmierer erheblich verbessern wird.
Beantwortet von – Lajos Arpad
Antwort geprüft von – Clifford M. (FixError Volunteer)