Comment vérifier si c’est une url de blob utilisant javascript

Je suis dans une situation où je convertis blobURL en base64 dataURL, mais je souhaite le faire uniquement si url est un blobURL.

Alors, y a-t-il un moyen de vérifier si c’est une URL de blob valide?

mon URL de blob – blob:http://192.168.0.136/85017e84-0f2d-4791-b563-240794abdcbf

Vous faites face à un problème xy .

Vous n’avez absolument pas besoin de vérifier si votre blobURI est valide, car vous n’avez absolument pas besoin d’utiliser blobURI pour créer une version base64 du blob sur lequel elle pointe.

La seule façon de le faire est d’extraire le blob, ce qui signifie créer une copie de ses données en mémoire pour rien.

Ce dont vous avez besoin est un moyen de récupérer ce blob.

Il n’y a malheureusement pas de moyen officiel de le faire avec les API Web, mais ce n’est pas si difficile de le faire nous-mêmes:

Nous devons simplement écraser la méthode par défaut URL.createObjectURL afin de mapper le blob passé dans un dictionnaire en utilisant le blobURI comme clé:

 (() => { // overrides URL methods to be able to resortingeve the original blobs later on const old_create = URL.createObjectURL; const old_revoke = URL.revokeObjectURL; Object.defineProperty(URL, 'createObjectURL', { get: () => storeAndCreate }); Object.defineProperty(URL, 'revokeObjectURL', { get: () => forgetAndRevoke }); Object.defineProperty(URL, 'getBlobFromObjectURL', { get: () => getBlob }); const dict = {}; function storeAndCreate(blob) { var url = old_create(blob); // let it throw if it has to dict[url] = blob; return url } function forgetAndRevoke(url) { old_revoke(url); // some checks just because it's what the question titel asks for, and well to avoid deleting bad things try { if(new URL(url).protocol === 'blob:') delete dict[url]; }catch(e){} // avoided deleting some bad thing ;) } function getBlob(url) { return dict[url]; } })(); // a few example uses const blob = new Blob(['foo bar']); // first normal use everyhting is alive const url = URL.createObjectURL(blob); const resortingeved = URL.getBlobFromObjectURL(url); console.log('resortingeved: ', resortingeved); console.log('is same object: ', resortingeved === blob); // a revoked URL, of no use anymore const revoked = URL.createObjectURL(blob); URL.revokeObjectURL(revoked); console.log('revoked: ', URL.getBlobFromObjectURL(revoked)); // an https:// URL console.log('https: ', URL.getBlobFromObjectURL(location.href)); 

vous pourriez faire quelque chose comme

  var url = 'blob:http://192.168.0.136/85017e84-0f2d-4791-b563-240794abdcbf'; if(url.search('blob:') == -1){ //do something } 

vous pouvez également utiliser la vérification basée sur l’expression régulière avec url.match('url expression')