使用leadtools的WCF接口功能實現從web端上傳Dicom影像文件

Leadtools 19總套包下載>>>php

 

leadtools爲web端提供了wcf接口來供用戶能夠登陸pacs系統,檢索,查看以及上傳影像。本篇博客講解如何建立一個網頁來實現上傳功能,經過WCF進行dicom文件的上傳時,是將dicom文件轉換爲base64數據流,分段進行傳輸。html

 

本篇博客運行的前提是已經部署完成Leadtools HTML5 Web Viewer,能夠正常瀏覽。參考https://www.evget.com/article/2018/2/6/27757.htmljquery

 

在部署完成後,將下面的代碼複製到一個HTML文件中,便可運行進行測試。另外須要添加html文件所需的jquery.min.js到同文件夾路徑下。web

<head>
    <meta charset="UTF-8">
head>ajax

<form onsubmit="return false;">
    <input type="hidden" name="file_base64" id="file_base64">
    <input type="file" id="fileup" multiple="multiple">
    <input type="submit" value="submit" onclick="$.post('./uploader.php', $(this).parent().serialize());">
    <div>
        <div id="msg">div>
    div>
form>
<script src="scripts/jquery.min.js">script>
<script>json

    $(document).ready(function () {
        authcookie = login();
        document.cookie = "authcookie=" + authcookie;
        $("#fileup").change(function () {
            getauthcookie("authcookie");
            filelist = this.files;
            file = filelist[fileindex];
            upload(file);
        });
    });
    var authcookie;//保存authcookie
    var filelist;//上傳文件列表
    var file;//當前上傳文件
    var tempfile = "";//臨時文件名稱
    var position = 0;
    var size = 40000;//分段大小
    var done = false;
    var fileindex=0;//當前上傳文件序列號cookie

    function upload(tempfile) {
        if(position==0)
            done=false;
        var reader = new FileReader();
        if (file.size > position + 40000)
            reader.readAsArrayBuffer(file.slice(position, position + 40000));
        else 
            reader.readAsArrayBuffer(file.slice(position, file.size));
        reader.onload = function (e) {
            if (e.target.readyState === 2) {
                var base64string = base64ArrayBuffer(e.target.result);
                var data = {
                    authenticationCookie: authcookie,
                    dicomData: base64string,
                    fileName: tempfile,
                    status: position==0?"start":"append"
                };
                tempfile = senddata(JSON.stringify(data));
                if (!done) {
                    position += 40000;
                    upload(tempfile);
                    if (position+40000>file.size)
                        done = true;
                }
                else {
                    var data = {
                        authenticationCookie: authcookie,
                        dicomData: "",
                        fileName: tempfile,
                        status: "done"
                    };
                    tempfile = senddata(JSON.stringify(data));
                    position = 0;
                    $("#msg").html($("#msg").html()+"第"+(fileindex+1)+"個文件已經上傳完成
");
                    fileindex += 1;
                    if (fileindex < filelist.length) {
                        file = filelist[fileindex];
                        upload(tempfile);
                    }
                    else {
                        fileindex = 0;
                        $("#msg").html($("#msg").html() + "文件所有已經上傳完成
");
                    }app

                }
            }async

        };
        oop

    }

function senddata(data) {
    var result;
    $.ajax({
        type:"post",
        url: "http://localhost/MedicalViewerService19/StoreService.svc/UploadDicomImage",
        data: data,
        contentType: "application/json",
        dataType: "json",
        success: function(data){result= data},
        async: false

    });
    return result;

}

function login() {
    var auth;
    var logininfo = { userName: "a", password: "a", userData: "" };
    $.ajax({
        type: "post",
        url: "http://localhost/MedicalViewerService19/AuthenticationService.svc/AuthenticateUser",
        data: JSON.stringify(logininfo),
        contentType: "application/json",
        dataType: "text",
        success: function (data) { auth= data },
        async: false

    });
    return auth;

}

function query() {
    
}

function getauthcookie() {
    document.cookie.split(";").forEach(function (val, index) {
        var index = val.indexOf("=");
        if ($.trim(val.substring(0, index)) == "authcookie") {
            authcookie = $.trim(val.substring(index + 1, val.length));
        }


    });
    return "";
}

function base64ArrayBuffer(arrayBuffer) {
    var base64 = '';
    var encodings = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';

    var bytes = new Uint8Array(arrayBuffer);
    var byteLength = bytes.byteLength;
    var byteRemainder = byteLength % 3;
    var mainLength = byteLength - byteRemainder;

    var a, b, c, d;
    var chunk;

    // Main loop deals with bytes in chunks of 3
    for (var i = 0; i < mainLength; i = i + 3) {
        // Combine the three bytes into a single integer
        chunk = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2];

        // Use bitmasks to extract 6-bit segments from the triplet
        a = (chunk & 16515072) >> 18; // 16515072 = (2^6 - 1) << 18
        b = (chunk & 258048) >> 12; // 258048   = (2^6 - 1) << 12
        c = (chunk & 4032) >> 6; // 4032     = (2^6 - 1) << 6
        d = chunk & 63;               // 63       = 2^6 - 1

        // Convert the raw binary segments to the appropriate ASCII encoding
        base64 += encodings[a] + encodings[b] + encodings[c] + encodings[d];
    }

    // Deal with the remaining bytes and padding
    if (byteRemainder == 1) {
        chunk = bytes[mainLength]

        a = (chunk & 252) >> 2; // 252 = (2^6 - 1) << 2

        // Set the 4 least significant bits to zero
        b = (chunk & 3) << 4; // 3   = 2^2 - 1

        base64 += encodings[a] + encodings[b] + '==';
    } else if (byteRemainder == 2) {
        chunk = (bytes[mainLength] << 8) | bytes[mainLength + 1];

        a = (chunk & 64512) >> 10; // 64512 = (2^6 - 1) << 10
        b = (chunk & 1008) >> 4; // 1008  = (2^6 - 1) << 4

        // Set the 2 least significant bits to zero
        c = (chunk & 15) << 2 // 15    = 2^4 - 1

        base64 += encodings[a] + encodings[b] + encodings[c] + '=';
    }

    return base64;
}

script>

相關文章
相關標籤/搜索