#javascript
#javascript
Вопрос:
Я написал тест, чтобы проверить, что аудио (MP3, WAV) находится в правильном формате URL.
Теперь я хочу проверить две вещи:
- что URL-адрес существует
- сделайте запрос head, чтобы убедиться, что URL-адрес ссылается на аудиофайл
Как мне это сделать? Мне еще предстоит найти какие-либо хорошие примеры JavaScript для создания запросов head.
// The test being performed
if (result.onClose === true) {
if(UtilService.isValidUrl(result.url) amp;amp; UtilService.isValidAudioUrl(result.url)) {
console.log('url is valid')
}
}
// In UtilService
static isValidUrl(urlToCheck: string) {
let url;
try {
url = new URL(urlToCheck);
} catch (_) {
return false;
}
return url.protocol === 'http:' || url.protocol === 'https:';
}
// Unsure how to perform the check here
static isValidAudioUrl(urlToCheck: string) {
const xhr = new XMLHttpRequest();
xhr.open("HEAD", urlToCheck);
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) {
console.log(xhr.status);
console.log(xhr.responseText);
}};
xhr.send();
// I'd like it to return a boolean value of true or false in isValidAudioUrl if the response header indicates the media type of the URL is audio and exists
return false;
}
Комментарии:
1. Как это происходит? Можете ли вы указать точный блокировщик?
2. Я бы хотел, чтобы он возвращал логическое значение true или false,
isValidAudioUrl
если заголовок ответа указывает, что тип носителя URL-адреса является аудио и существует.3. Я понимаю вашу задачу. Мне интересно, какой именно блокировщик у вас есть, что побудило вас задать этот вопрос. Ваш фрагмент не запускается, поэтому, прежде чем я начну изучать вашу проблему, мне нужно понять, в чем проблема.
4. О, извините, что не объяснил. Мой текущий блокировщик не может понять, как выполнить эту проверку, учитывая действительный и недопустимый URL-адрес аудио. Извиняюсь за то, что фрагмент не работает.
5. Не беспокойтесь, я также пользователь с высоким рейтингом, который иногда задает вопрос, и некоторые люди отвергают его. Я думаю, что ваш вопрос верен, у меня просто есть некоторые пояснения. Итак, является ли недопустимый URL-адрес аудио допустимым URL-адресом, не указывающим на аудио, или полностью недопустимым URL-адресом? Кстати, я знаю об этой проблеме не больше, чем вы, но давайте попробуем разобраться.
Ответ №1:
Я думаю, что ваша функция проверки URL-адреса аудио может выглядеть следующим образом. Идея состоит в том, чтобы проверить заголовок Content-type
ответа. Для аудиофайлов он обычно начинается с audio (например, audio / mpeg)
function isValidAudioUrl(urlToCheck) {
return fetch(urlToCheck, { method: 'HEAD', mode: 'no-cors' })
.then(res => res.ok amp;amp; res.headers.get('content-type').startsWith('audio'))
.catch(err => console.log(err.message));
}
// In your code
console.log('validating');
isValidAudioUrl('https://<YOUR_URL>.mp3')
.then(result => console.log(result));
Комментарии:
1. Спасибо, я попробовал это, но я получаю следующее сообщение об ошибке
Access to fetch at 'https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3' from origin 'http://localhost:4200' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
2. Вы можете попробовать режим no-cors (обновил ответ)