Как отобразить изображение файла MS Word в jQuery, а затем загрузить его с помощью Ajax?

#jquery #ajax #file-upload

#jquery #ajax #загрузка файла

Вопрос:

Я загружаю файлы. Перед их загрузкой я показываю их изображение, используя приведенный ниже код. Это работает для файлов PDF и изображений (‘gif’, ‘png’, ‘jpg’, ‘jpeg’). Теперь я хочу включить документы MS Word (‘doc’, ‘docx’). Как мне отобразить изображение или я должен просто отобразить «вставленное» изображение (например, страницу с буквой «W» на ней)?

 var imageType = "";

$(document).on('change', '.photo-input', function(){
    //Check for a valid image extension
    var img1 = this.files[0].type;
    imageType = img1.substr(img1.indexOf("/")   1)
    alert("imageType: "   imageType);
    if (imageType === "doc" || imageType === "docx"){
        alert("Word");
        var mySubString = img1.substring(
            img1.lastIndexOf("image")   13
        );
        alert("mySubString: "   mySubString);
    }else{
        if(imageType === "pdf"){
            var mySubString = img1.substring(
                img1.lastIndexOf("image")   13
            );
            if($.inArray(mySubString, ['pdf']) == -1) {
                alert('Add invalid extension!');
                $('#image').attr('src', 'data:application/(pdf);base64');
            }else{
                //Check for a valid image size
                if (this.files[0].size < 10000000){
                    readURL(this, this.id);
                }else{
                    alert("This image is to large (must be < 1 MB).")
                    $('#image').attr('src', 'data:application/(pdf);base64');
                }
                var img1 = document.getElementById('image');
                img2 = (img1.getAttribute('src')).replace(/^data:application/(pdf);base64,/, "");
            }
        }else{
            var mySubString = img1.substring(
                img1.lastIndexOf("image")   6
            );
            if($.inArray(mySubString, ['gif','png','jpg','jpeg']) == -1) {
                alert('Add invalid extension!');
                $('#image').attr('src', 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==');
            }else{
                //Check for a valid image size
                if (this.files[0].size < 10000000){
                    readURL(this, this.id);
                }else{
                    alert("This image is to large (must be < 1 MB).")
                    $('#image').attr('src', 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==');
                }
                var img1 = document.getElementById('image');
                img2 = (img1.getAttribute('src')).replace(/^data:image/(png|jpg|jpeg|gif);base64,/, "");
            }
        }
    }

});


function readURL(input, id) {
    if (input.files amp;amp; input.files[0]) {
        var reader = new FileReader();

        reader.onload = function (e) {
            if(imageType === "pdf"){
                $("#imageDiv").html("");
                $("<embed width='191' height='207' id='imageManualAdd' src='' type='application/pdf' class='img-thumbnail'>").appendTo($("#imageDiv"));
            }else{
                $("#imageDiv").html("");
                $("<img id='image' src='' alt='Image' class='img-thumbnail'>").appendTo($("#imageDiv"));
            }

            $('#image').attr('src', e.target.result);
        }

        reader.readAsDataURL(input.files[0]);
    }
}
  

Кроме того, в рамках этого я готовлю изображение для загрузки в базу данных MySQL (я понимаю аргументы против этого) через ajax:

         if(imageType === "pdf"){
            img2 = (img1.getAttribute('src')).replace(/^data:application/(pdf);base64,/, "");
        }else{
            img2 = (img1.getAttribute('src')).replace(/^data:image/(png|jpg|jpeg|gif);base64,/, "");
        }
  

Где «img2» является частью данных, передаваемых в программу Java. Как мне нужно изменить это для документа MS Word, пожалуйста?

Ответ №1:

Я придумал это (обратите внимание, как я скрываю изображение MS Word и отображаю изображение по умолчанию):

 var imageType = "";
var thisFile = "";

$(document).on('change', '.photo-input', function(){
    //Check for a valid image extension
    var filePath = $('#photo').val();
    var extension = filePath.substr( (filePath.lastIndexOf('.')  1) );
    var fileName = filePath.split('\').pop();
    var fileName = fileName.substr(0, fileName.lastIndexOf('.')) || fileName;

    $("#resourceNameAdd").val(fileName);
    
    var img1 = this.files[0].type;
    imageType = img1.substr(img1.indexOf("/")   1)
    
    if (extension === "doc" || extension === "docx"){
        imageType = extension;
        if (this.files[0].size < 10000000){
            readURL(this, this.id);
        }else{
            alert("This image is to large (must be < 1 MB).")
            $('#image').attr('src', 'data:application/(pdf);base64');
        }
    }else{
        if(imageType === "pdf"){
            var mySubString = img1.substring(
                img1.lastIndexOf("image")   13
            );
            if($.inArray(mySubString, ['pdf']) == -1) {
                alert('Add invalid extension!');
                $('#image').attr('src', 'data:application/(pdf);base64');
            }else{
                //Check for a valid image size
                if (this.files[0].size < 10000000){
                    readURL(this, this.id);
                }else{
                    alert("This image is to large (must be < 1 MB).")
                    $('#image').attr('src', 'data:application/(pdf);base64');
                }
            }
        }else{
            var mySubString = img1.substring(
                img1.lastIndexOf("image")   6
            );
            if($.inArray(mySubString, ['gif','png','jpg','jpeg']) == -1) {
                alert('Add invalid extension!');
                $('#image').attr('src', 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==');
            }else{
                //Check for a valid image size
                if (this.files[0].size < 10000000){
                    readURL(this, this.id);
                }else{
                    alert("This image is to large (must be < 1 MB).")
                    $('#image').attr('src', 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==');
                }
            }
        }
    }

function readURL(input, id) {
    if (input.files amp;amp; input.files[0]) {
        
        var reader = new FileReader();
        reader.onload = function (e) {
            if(imageType === "doc" || imageType === "docx"){
                $("#imageDiv").html("");
                $("<img id='image' src='' alt='Image' class='img-thumbnail' style='display:none'>").appendTo($("#imageDiv"));
                $("<img id='image2' src='images/msWord.png'' alt='Image' class='img-thumbnail'>").appendTo($("#imageDiv"));
            }else{
                if(imageType === "pdf"){
                    $("#imageDiv").html("");
                    $("<embed width='191' height='207' id='image' src='' type='application/pdf' class='img-thumbnail'>").appendTo($("#imageDiv"));
                }else{
                    $("#imageDiv").html("");
                    $("<img id='image' src='' alt='Image' class='img-thumbnail'>").appendTo($("#imageDiv"));
                }
            }

            $('#image').attr('src', e.target.result);
        }
        // readAsArrayBuffer, readAsBinaryString, readAsDataURL or readAsText is available.
        reader.readAsDataURL(input.files[0]);
    }
}