0

hi i am acquiring the image from the scanner device successfully i want to store that image in data base i am thinking that i need to convert into byte array then pass to controller but i am not able to convert that image into byte array. can any one please suggest me that is it right approach or not,if it is wrong then what is the alternate way please help me. this is my code.

<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html lang="en">
<head>
<title>Scanning documets</title>

<script type="text/javascript"
    src="http://direct.asprise.com/scan/javascript/base/scanner.js"></script>
<!-- required for scanning -->

<script src="//code.jquery.com/jquery-1.11.1.min.js"></script>
<!-- optional -->

<link href="http://getbootstrap.com/dist/css/bootstrap.min.css"
    rel="stylesheet">
<!-- optional -->
<style type="text/css">
img.zoom {
    margin-right: 4px;
}

body {
    margin: 20px 10px;
}
</style>

<script>
    // -------------- Optional status display, depending on JQuery --------------
    function displayStatus(loading, mesg, clear) {
        $('#info').empty(); // jQuery is used
        if (loading) {
            $('#info')
                    .html(
                            (clear ? '' : $('#info').html())
                                    + '<p><img src="http://asprise.com/legacy/product/_jia/applet/loading.gif" style="vertical-align: middle;" hspace="8"> '
                                    + mesg + '</p>');
        } else {
            $('#info').html((clear ? '' : $('#info').html()) + mesg);
        }
    }

    // -------------- scanning related code: independent of any 3rd JavaScript library --------------
    /*  function scanSimple() {
         displayStatus(true, 'Scanning', true);
         com_asprise_scan_request(myCallBackFunc,
             com_asprise_scan_cmd_method_SIMPLE_SCAN, // simple scan without the applet UI
             com_asprise_scan_cmd_return_IMAGES_AND_THUMBNAILS,
             null);
     }
     */
    function scan() {
        displayStatus(true, 'Scanning', true);
        com_asprise_scan_request(myCallBackFunc,
                com_asprise_scan_cmd_method_SCAN, // normal scan with the applet UI
                com_asprise_scan_cmd_return_IMAGES_AND_THUMBNAILS, {
                    'wia-version' : 2
                });
    }

    /*  function scanThenUpload() {
         displayStatus(true, 'Scanning', true);
         com_asprise_scan_request(myCallBackFunc,
             com_asprise_scan_cmd_method_SCAN_THEN_UPLOAD, // scan and then upload directly in the applet UI
             com_asprise_scan_cmd_return_IMAGES_AND_THUMBNAILS,
             {
                 'upload-url': 'http://asprise.com/scan/applet/upload.php?action=upload' // target URL
                 ,'format': 'PDF'
             });
     } */

    /** Use this callback function to get notified about the scan result. */
    function myCallBackFunc(success, mesg, thumbs, images) {
        var logText;
        displayStatus(false, '', true);
        logText = 'Callback function invoked: success = ' + success
                + ", mesg = " + mesg;
        logText += '\nThumbs: ' + (thumbs instanceof Array ? thumbs.length : 0)
                + ", images: " + (images instanceof Array ? images.length : 0)

                + ",image name" + (images instanceof Array ? images.name : 0);
        logToConsole(logText, !(success || mesg == 'User cancelled.'));
        displayStatus(false, '<pre>' + logText + '</pre>', true);

        for (var i = 0; (images instanceof Array) && i < images.length; i++) {
            addImage(images[i], document.getElementById('images'));
        }
    }

    /** We use this to track all the images scanned so far. */
    var imagesScanned = [];

    function addImage(imgObj, domParent) {
        imagesScanned.push(imgObj);
        var imgSrc = imgObj.datatype == com_asprise_scan_datatype_BASE64 ? 'data:'
                + imgObj.mimetype + ';base64,' + imgObj.data
                : imgObj.data;
        var elementImg = createDomElementFromModel({
            'name' : 'img',
            'attributes' : {
                'src' : imgSrc,
                'height' : '100',
                'class' : 'zoom'
            }
        });

        $('<input>').attr({
            type : 'hidden',
            name : '',

        })

        $('#imageData').val(imgSrc);
        domParent.appendChild(elementImg);

        // optional UI effect that allows the user to click the image to zoom.
        enableZoom();
    }

    function submitForm1() {
        displayStatus(true, "Submitting in progress, please standby ...", true);
        com_asprise_scan_submit_form_with_images('form1', imagesScanned,
                function(xhr) {
                    alert("image :" + imagesScanned);
                    if (xhr.readyState == 4) { // 4: request finished and response is ready
                        displayStatus(false,
                                "<h2>Response from the server: </h2>"
                                        + xhr.responseText, true);
                        alert("before");
                        document.getElementById("form1").submit();
                    }
                });
    }
</script>
</head>

<body style="margin: 10px 30px;">
    <div
        style="display: block; position: absolute; right: 30px; top: 20px;">
        <!--  <a href="http://asprise.com/" target=_blank> <img src="http://asprise.com/res/img/nav/logo.fw.png"/> </a> -->
    </div>

    <h2></h2>

    <!-- <p style="color: #9eadc0;">For evaluation purpose only. Please order a license from <a href="http://asprise.com/" target=_blank>asprise.com</a>
| <a href="https://github.com/Asprise/scanner.js/blob/master/scanner.js-demo.html" target="_blank">View source code of this page</a>
</p> -->

    <div class="panel panel-info" style="margin: 20px 0px;">
        <div class="panel-heading">
            <h3 class="panel-title">Scann your docs:</h3>
        </div>
        <div class="panel-body">
            <form id="form1" action="<c:url value='/upload'/>" method="POST"
                enctype="multipart/form-data" target="_blank">
                <!-- <label for="field1"
                    style="display: inline-block; width: 150px; text-align: right;">Field
                    1</label> <input id="field1" name="field1" type="text" value="value 1" /> <input
                    type="file" name="file" /> <br> -->
                <span style="height: 4px;"></span><br> <label
                    style="display: inline-block; width: 150px; text-align: right;">Documents</label>
                <button type="button" class="btn btn-info" onclick="scan();">Scan</button>
                <!--  <button type="button" class="btn btn-default" onclick="scanSimple();">Simple Scan</button>

            <button type="button" class="btn btn-default" onclick="scanThenUpload();">Scan Then Upload</button> -->

                <div id="images" style="margin-left: 154px; margin-top: 10px;">
                    <input type="hidden" name="imageName" value="" /> 

                </div>

                <input type="button" class="btn btn-primary" value="Submit form"
                    onclick="submitForm1();"
                    style="margin-left: 154px; margin-top: 20px;">
            </form>
        </div>
    </div>

    <div id="info" class="well"
        style="display: block; background-color: #fff; height: 500px; margin-top: 12px; padding: 12px; overflow: scroll;">
        <p>
            <i>Information window</i>
        </p>
    </div>


    <script src="http://yyx990803.github.io/zoomerang/zoomerang.js"></script>
    <script>
        function enableZoom() {
            Zoomerang.config({
                maxWidth : window.innerWidth, // 400,
                maxHeight : window.innerHeight, // 400,
                bgColor : '#000',
                bgOpacity : .85
            }).listen('.zoom');
        }
    </script>

</body>
</html>
Sthogari
  • 31
  • 2
  • 7
  • Just sent the file via multipart file and convert the file into byte array in the controller. You can utilize SerializationUtils class provided either by spring or apache. Then you can convert into byte array utilizing the serialize() function and store in database. – Rohith K Jan 28 '15 at 06:19
  • 1
    [Java: convert image to byte array, convert byte array to image](http://www.programcreek.com/2009/02/java-convert-image-to-byte-array-convert-byte-array-to-image/) – davidcondrey Jan 28 '15 at 06:32
  • i tried but the converted byte array size i am getting as null – Sthogari Jan 28 '15 at 06:38
  • can you explain how can i pass that acquired image into multipart file which your thinking. – Sthogari Jan 28 '15 at 06:40

1 Answers1

0

You can get the image binary in BASE64 format. The imgObj.data in below code is the BASE64 format of image object:

 function addImage(imgObj, domParent) {
        imagesScanned.push(imgObj);
        var imgSrc = imgObj.datatype == com_asprise_scan_datatype_BASE64 ? 'data:'
                + imgObj.mimetype + ';base64,' + imgObj.data
                : imgObj.data;
         ...

To get the actual binary bytes, you can use:

var bin = window.atob(imgObj.data)

For a complete discussion of converting BASE64 to binary, please refer to: Base64 encoding and decoding in client-side Javascript

For a complete usage of scanner.js, you may consult Developer guide to scanner.js: cross-Browser HTML/JavaScript Scanning - Acquires images from scanners to web pages (Java, C# ASP.NET, PHP)

Community
  • 1
  • 1