Почему revokeObjectURL не показывает размер файла в IE 11
var fileInput = document.querySelector('#file');
var preview = document.getElementById('preview');
fileInput.addEventListener('change', function(e) {
var var_error = 0;
$('.contest_upload_preview').show();
$('.contest_upload_error').hide();
preview.onload = function() {
var pic_width = this.naturalWidth;
var pic_height = this.naturalHeight;
var pic_size = $('#file')[0].files[0].size;
// alert("FS: "+pic_size);
if(pic_size > 15728640) {
//larger than 15MB (15728640).
var_error = 1;
var_upload_pic = 1;
preview.setAttribute('src', '');
} else {
//Dimension-check
if(pic_width < 720) {
var_error = 1;
var_upload_pic = 1;
preview.setAttribute('src', '');
}
if(pic_height < 720) {
var_error = 1;
var_upload_pic = 1;
preview.setAttribute('src', '');
}
}
window.URL.revokeObjectURL(this.src);
};
if(var_error == 0) {
console.log("geladen");
var url = URL.createObjectURL(e.target.files[0]);
preview.setAttribute('src', url);
var_upload_pic = 0;
}
}, false);
Этот скрипт работает нормально, кроме IE 11. Я получаю эту ошибку: DOM7001: Аргумент Ungültiges "url". Fehler beim Sperren der folgenden Blob-URL
Если я Google "window.URL.revokeObjectURL IE11", он должен работать, есть идеи, почему бы и нет?
Спасибо
2 ответа
Вы можете хотеть просто защититься от пустого this.src
, так как вы устанавливаете его в функции (через setAttribute
):
if(this.src) window.URL.revokeObjectUrl(this.src);
Internet Explorer не предоставляет стандартного способа проверки размера файла перед загрузкой.
Смотрите здесь для получения дополнительной информации о file api
,
Вы по-прежнему можете определить размер файла, но это громоздко, так как вы будете изменять браузер пользователя, чтобы он включал ActiveX на вашей странице. Вот соответствующий код.
function getSize()
{
var myFSO = new ActiveXObject("Scripting.FileSystemObject");
var filepath = document.upload.file.value;
var thefile = myFSO.getFile(filepath);
var size = thefile.size;
alert(size + " bytes");
}