Ich erstelle das Frontend einer Anwendung mit Angular 2 und ich versuche, ein Bild von einer Website von Drittanbietern mit XMLHttpRequest zu laden.Fehler mit XMLHttpRequest - "Kein 'Access-Control-Allow-Origin' Header ist auf der angeforderten Ressource vorhanden."
Mein Code ist unten:
loadFile(fileUrl) {
const promise = new Promise((resolve, reject) => {
const request = new XMLHttpRequest();
request.open('GET', fileUrl, true);
request.setRequestHeader('Accept', 'image/jpeg');
request.onload =() => {
if (request.status === 200) {
resolve(request);
}
else {
reject(Error(request.statusText));
}
};
request.onerror =() => {
reject(Error('Network error.'));
};
request.send();
});
return promise;
}
Und das ist der Code, den ich verwende zu testen:
import FileHelper from './file-helper';
describe('File Helper',() => {
it('should retrieve the contents of an image on the web', (done) => {
let fileLoadPromise, fileContent;
fileLoadPromise = FileHelper.loadFile('http://adsoftheworld.com/files/steve-jobs.jpg');
fileLoadPromise.then((request: XMLHttpRequest) => {
fileContent = request.responseText;
expect(request.responseType).toEqual('image/jpeg');
done();
}).catch(error => {
console.log(error);
done.fail();
});
expect(fileContent).toBeTruthy();
});
});
Ich habe um das Internet geschaut und mehrere Seiten gesagt, dass ich sollte fügen Sie image/jpeg
zu meinen Überschriften hinzu, also tat ich es unter Verwendung dieses: request.setRequestHeader('Accept', 'image/jpeg');
, jedoch erhalte ich noch den Fehler unten, wann immer ich diesen Code laufen lasse:
XMLHttpRequest cannot load http://adsoftheworld.com/files/steve-jobs.jpg. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:9876' is therefore not allowed access.
Kann mir jemand helfen?
'adsoftheworld.com' muss eine' Access-Control-Allow-Origin' Header in seiner Antwort dienen, die Scripts auf Ihrer Seite können Sie den Inhalt der Antwort lesen. Dies ist ein Sicherheitsmechanismus, um zu verhindern, dass nicht vertrauenswürdige Skripts die Inhalte anderer Sites lesen, als ob sie der ahnungslose Benutzer wären, der das Skript ausführt. Die sauberste Lösung besteht darin, einen serverseitigen Proxy zu verwenden, um den Inhalt der anderen Site abzurufen und dann den Inhalt der Antwort an Ihr Skript auf demselben Ursprung wie Ihre Webseite zu liefern. – apsillers