回答:
あなたは次のようなものを使うことができます:
function imageExists(image_url){
var http = new XMLHttpRequest();
http.open('HEAD', image_url, false);
http.send();
return http.status != 404;
}
もちろん、jQuery / similarを使用してHTTPリクエストを実行できます。
$.get(image_url)
.done(function() {
// Do something now you know the image exists.
}).fail(function() {
// Image doesn't exist - do something else.
})
fileExists
この関数は画像がサーバーに存在するかどうかをチェックしないので、私はもっといい名前だと思いました。サーバーからファイルにアクセスできるかどうかを確認します。そのファイルが実際に画像であるかどうかのチェックはありません。.pdf、.html、ランダムファイルの名前が* .jpgまたは* .pngに変更された可能性があります。何かが.jpgで終わっていても、それが100%画像であることを意味するわけではありません:)
Image
オブジェクトを使用しても、その制限はありません。これの唯一の利点は、実際にイメージをダウンロードしないことです。
イメージプリローダーが機能する基本的な方法を使用して、イメージが存在するかどうかをテストできます。
function checkImage(imageSrc, good, bad) {
var img = new Image();
img.onload = good;
img.onerror = bad;
img.src = imageSrc;
}
checkImage("foo.gif", function(){ alert("good"); }, function(){ alert("bad"); } );
return
@ ajtrichardsが彼の回答の最初の部分で持っているようなステートメントでこれを行います。
すべての画像に提供されている組み込みイベントを使用して、画像が読み込まれるかどうかを確認できます。
onload
そしてonerror
、画像が正常にロードされた場合、またはエラーが発生した場合、イベントを教えてくれます。
var image = new Image();
image.onload = function() {
// image exists and is loaded
document.body.appendChild(image);
}
image.onerror = function() {
// image did not load
var err = new Image();
err.src = '/error.png';
document.body.appendChild(err);
}
image.src = "../imgs/6.jpg";
error
。失敗すると、ハンドラーがトリガーされます。
Reactベースのクライアントでこれを行うために誰かがこのページにアクセスした場合、以下のようなことができます。これは、ReactチームのSophia Alpertによって提供されたオリジナルの回答です。
getInitialState: function(event) {
return {image: "http://example.com/primary_image.jpg"};
},
handleError: function(event) {
this.setState({image: "http://example.com/failover_image.jpg"});
},
render: function() {
return (
<img onError={this.handleError} src={src} />;
);
}
より優れた最新のアプローチは、ES6 Fetch APIを使用して画像が存在するかどうかを確認することです。
fetch('https://via.placeholder.com/150', { method: 'HEAD' })
.then(res => {
if (res.ok) {
console.log('Image exists.');
} else {
console.log('Image does not exist.');
}
}).catch(err => console.log('Error:', err));
同じ発信元のリクエストを行っているか、サーバーでCORSが有効になっていることを確認してください。
このJS関数を呼び出して、サーバーにファイルが存在するかどうかを確認できます。
function doesFileExist(urlToFile)
{
var xhr = new XMLHttpRequest();
xhr.open('HEAD', urlToFile, false);
xhr.send();
if (xhr.status == "404") {
console.log("File doesn't exist");
return false;
} else {
console.log("File exists");
return true;
}
}
基本的には、約束されたバージョンの@espascarelloと@adeneoの回答と、フォールバックパラメータ:
const getImageOrFallback = (path, fallback) => {
return new Promise(resolve => {
const img = new Image();
img.src = path;
img.onload = () => resolve(path);
img.onerror = () => resolve(fallback);
});
};
// Usage:
const link = getImageOrFallback(
'https://www.fillmurray.com/640/360',
'https://via.placeholder.com/150'
).then(result => console.log(result) || result)
// It can be also implemented using the async / await API.
注:個人的にはこのfetch
ソリューションの方が好きかもしれませんが、欠点があります。サーバーが特定の方法で構成されている場合、ファイルが存在しなくても200/304を返す可能性があります。一方、これは仕事をします。
fetch
、あなたが使用できるok
のプロパティresponse
:オブジェクトを要求が成功したかどうかをチェックする fetch(url).then(res => {if(res.ok){ /*exist*/} else {/*not exist*/}});
background-image: url('/a/broken/url')
をくれます。200
ok
対応する画像フォルダへの相対パスを設定することにより、axiosでこれを行うことができます。私はjsonファイルを取得するためにこれを行いました。あなたは画像ファイルに対して同じ方法を試すことができます、あなたはこれらの例を参照するかもしれません
baseurlを使用してaxiosインスタンスを別のドメインのサーバーとして既に設定している場合は、Webアプリケーションをデプロイする静的ファイルサーバーの絶対パスを使用する必要があります。
axios.get('http://localhost:3000/assets/samplepic.png').then((response) => {
console.log(response)
}).catch((error) => {
console.log(error)
})
画像が見つかった場合、応答は200になり、見つからない場合、応答は404になります。
また、画像ファイルがsrc内のassetsフォルダにある場合は、requireを実行してパスを取得し、そのパスを使用して上記の呼び出しを実行できます。
var SampleImagePath = require('./assets/samplepic.png');
axios.get(SampleImagePath).then(...)
これはうまくいきます:
function checkImage(imageSrc) {
var img = new Image();
try {
img.src = imageSrc;
return true;
} catch(err) {
return false;
}
}
このリンクを参照して、JavaScriptで画像ファイルが存在するかどうかを確認できます。
checkImageExist.js:
var image = new Image(); var url_image = './ImageFolder/' + variable + '.jpg'; image.src = url_image; if (image.width == 0) { return `<img src='./ImageFolder/defaultImage.jpg'>`; } else { return `<img src='./ImageFolder/`+variable+`.jpg'`; } } ```