代码之家  ›  专栏  ›  技术社区  ›  Glyn

使用HTML jQuery和Java在mySQL数据库中存储PDF

  •  0
  • Glyn  · 技术社区  · 7 年前

    我已经设法用图像来实现这一点,并且通过研究Stackoverflow上的文章和其他问题,尝试重新使用代码来存储pdf。不幸的是,对我来说,大多数示例都与PHP相关。我已经能够阅读pdf并将其显示在包含以下代码的页面中:

    HTML格式:

    <div class="form-group">
        <embed width="191" height="207" id="image" src="" type="application/pdf">
        <input class="form-control-file col-lg-12 col-md-12 col-sm-12 col-xs-12 photo-input" type="file" id="photo" name="photo" placeholder="PDF">
    </div>
    

    $(document).on('change', '.photo-input', function(){
        //Check for a valid image extension
        var img1 = this.files[0].type;
        alert("img1: " + img1);
        var mySubString = img1.substring(
            img1.lastIndexOf("image") + 13
        );
        alert("mySubString: " + mySubString)
        if($.inArray(mySubString, ['pdf']) == -1) {
            alert('Add invalid extension 1!');
            $('#image').attr('src', '');
        }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', '');
            }
            var img1 = document.getElementById('image');
            img2 = (img1.getAttribute('src')).replace(/^data:application\/(pdf);base64,/, "");
        }
    });
    
    function readURL(input, id) {
        if (input.files && input.files[0]) {
            var reader = new FileReader();
    
            reader.onload = function (e) {
                $('#image').attr('src', e.target.result);
            }
    
            reader.readAsDataURL(input.files[0]);
        }
    }
    

    然后,我传递要用ajax存储的pdf:

    $.ajax({
            type: "POST",
            url: "MedicalPlanAddView",
            cache: false,
            data : {
             ssAccountLevel : sessionStorage.getItem('ssAccountLevel'),
             ssAccountID : sessionStorage.getItem('ssAccountID'),
             ssNameID : sessionStorage.getItem('ssNameID'),
    
             image : img2,
             mpNameAdd: $("#mpNameAdd").val(),
      }, 
    })
    

    服务器端java是:

    private static byte[] getByteArrayFromFile(final String handledDocument) throws IOException {
        final ByteArrayOutputStream baos = new ByteArrayOutputStream();
        final InputStream in = new FileInputStream(handledDocument);
        final byte[] buffer = new byte[500];
        int read = -1;
        while ((read = in.read(buffer)) > 0) {
            baos.write(buffer, 0, read);
        }
        in.close();
        return baos.toByteArray();
    }
    
    ps.setString(1, nameId);
    ps.setString(2, medicalPlanName);
    ByteArrayInputStream bais = new 
    ByteArrayInputStream(getByteArrayFromFile(medicalPlan)); //pdf image
    ps.setBlob(3, bais); 
    ps.setString(4, updateDate);
    
    ps.executeUpdate();
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Glyn    7 年前

    这就是我最后所做的。

    HTML格式:

    <div class="form-group">
            <embed width="191" height="207" id="image" src="" type="application/pdf" class="img-thumbnail">
            <input class="form-control-file col-lg-12 col-md-12 col-sm-12 col-xs-12 photo-input" type="file" id="photo" name="photo" placeholder="PDF">
    </div>
    

    查询:

    $(document).on('change', '.photo-input', function(){
        //Check for a valid image extension
        var img1 = this.files[0].type;
        var mySubString = img1.substring(
            img1.lastIndexOf("image") + 13
        );
            if($.inArray(mySubString, ['pdf']) == -1) {
            alert('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,/, "");
        }
    });
    
    function readURL(input, id) {
        if (input.files && input.files[0]) {
            var reader = new FileReader();
    
            reader.onload = function (e) {
                $('#image').attr('src', e.target.result);
            }
    
            reader.readAsDataURL(input.files[0]);
        }
    }
    
        submitHandler : function(showMPAddForm) {
            var img1 = document.getElementById('image');
            img2 = (img1.getAttribute('src')).replace(/^data:application\/(pdf);base64,/, "");
    
            $.ajax({
                type: "POST",
                url: "MedicalPlanAddView",
                cache: false,
                data : {
                    ssAccountLevel : sessionStorage.getItem('ssAccountLevel'),
                    ssAccountID : sessionStorage.getItem('ssAccountID'),
                    ssNameID : sessionStorage.getItem('ssNameID'),
    
                    image : img2,
                    mpNameAdd: $("#mpNameAdd").val(),
                }, 
            })
            .fail (function(jqXHR, textStatus, errorThrown) {
                //alert(jqXHR.responseText);
                $('#ajaxGetUserServletResponse13').text('Error adding Medical Plan.');
            })
            .done(function(responseJson){
                $('#ajaxGetUserServletResponse13').text('Medical Plan added.');
                showActionPlanDataTable();
            })
        }
    

    SQL语言:

                    ps = c.prepareStatement(updateWithPhoto);
                    ps.setString(1, medicalPlanName);
    
                    BASE64Decoder decoder = new BASE64Decoder();
                    byte[] imageByte = decoder.decodeBuffer(medicalPlan);
                    ps.setBlob(2, new SerialBlob(imageByte));
    
                    ps.setString(3, updateDate);
                    ps.setString(4, medicalPlanId);
    
                    ps.executeUpdate();