Почему revokeObjectURL не показывает размер файла в IE 11 - PullRequest
0 голосов
/ 24 сентября 2018
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 ]

0 голосов
/ 24 сентября 2018

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");
}
0 голосов
/ 24 сентября 2018

Вы можете просто защитить себя от пустого this.src, так как вы устанавливаете его в функции (через setAttribute):

if(this.src) window.URL.revokeObjectUrl(this.src);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...