ตัวอย่างการใช้งาน


การขอ AccessToken

ข้อมูลที่ต้องใช้ในการขอ AccessToken
  • Consumer-Key : คือรหัสที่ได้รับจากระบบเมื่อลงทะเบียน
  • FileInfo : คือข้อมูลของไฟล์ที่จะขออัพโหลด มีรูปแบบดังนี้ { Name: <filename>, ContentType: <file contenttype>, Size: <filesize(byte)>, Consumers: [<ConsumerKey1>, <ConsumerKey2>, ...], IsPublic: <true/false>] }
  • SignedFileInfo : คือข้อมูลของ FileInfo ที่ถูกเข้ารหัสด้วย ConsumerSecret (ConsumerSecret คือรหัสที่ได้รับพร้อมกันกับ Consumer-Key เมื่อได้รับการลงทะเบียนจากระบบ) โดยจะต้องเข้ารหัสผ่าน method Signer.SignedFileInfo(..) จาก library DGA.FileService.Util
URL : https://file.dga.or.th/api/requesttoken/upload
*การขอ AccessToken สามารถทำได้ 2วิธีคือการขอผ่าน Client โดยตรงด้วย javascript หรือการขอผ่าน Server โดยใช้ method "ServiceHelper.RequestAccessToken()" ของ library "DGA.FileService.Util"


การอัพโหลดไฟล์

ข้อมูลที่ต้องใช้ในการอัพโหลดไฟล์
  • Consumer-Key : คือรหัสที่ได้รับจากระบบเมื่อลงทะเบียน
  • FileInfo : คือข้อมูลของไฟล์ที่จะขออัพโหลด โดยข้อมูลจะต้องตรงกันกับข้อมูลจาก AccessToken
  • AccessToken : คือบัตรผ่านชั่วคราวสำหรับการอัพโหลดไฟล์
  • SignedFileInfo : คือข้อมูลของ FileInfo ที่ถูกเข้ารหัสด้วย ConsumerSecret ซึ่งตัวข้อมูลจะต้องตรงกันกับข้อมูลจาก AccessToken
  • file : คือตัวไฟล์ที่จะใช้ในการอัพโหลด


ตัวอย่างการอัพโหลดไฟล์ด้วย JQuery

                        
    <span id="progress" class="text-info"></span>
    <input name="fileTest" type="file" id="fuTest" />
    <button id="invokeUpload">Upload</button>
    <script>
         $.extend({
            getConsumerKey: async function () {
                let result = null;
                await $.ajax({
                    type: 'POST',
                    url: '/signer/GetConsumerKey/', //your custom service to get your ConsumerKey.
                    success: function (data) {
                        result = data;
                    }, error: function (jqXHR, textStatus, errorThrown) {
                        let msg = jqXHR.status + ' ' + jqXHR.statusText + '.' + jqXHR.responseText;
                        // show error
                    }, fail: function () { alert('fail:') }
                });
                return result;
            },
            signFileInfo: async function (fileInfo) {
                let result = null;
                await $.ajax({
                    type: 'POST',
                    url: '/signer/SignFileInfo/', //your custom service to sign fileinfo.
                    data: { FileInfo: fileInfo },                    
                    success: function (data) {
                        result = data;
                    }, error: function (jqXHR, textStatus, errorThrown) {
                        let msg = jqXHR.status + ' ' + jqXHR.statusText + '.' + jqXHR.responseText;
                        // show error
                    }, fail: function () { alert('fail:') }
                });
                return result;
            },
            requestAccessToken: async function (consumerKey, fileInfo, signedFileInfo) {
                 var result = null;
                 await $.ajax({
                     type: "POST",
                     url: "https://file.dga.or.th/api/requesttoken/upload",
                     dataType: 'JSON',
                     data: { 'Consumer-Key': consumerKey, FileInfo: fileInfo, SignedFileInfo: signedFileInfo, Core: true },
                     success: function (data) {
                        result = data.accessToken;
                     }, error: function (jqXHR, textStatus, errorThrown) {
                        let msg = jqXHR.status + ' ' + jqXHR.statusText + '.' + jqXHR.responseText;
                        // show error
                     }, fail: function () { alert('fail:') }
                 });
                 return result;
            }, 
            uploadFile: async function (accessToken, file, fileInfo, signedFileInfo, chunk, chunks) {
                var result = null;
                var formdata = new FormData(); 
                formdata.append('AccessToken', accessToken);
                formdata.append('Consumer-Key', consumerKey);
                formdata.append('FileInfo', fileInfo);
                formdata.append('SignedFileInfo', signedFileInfo);
                formdata.append('Core', true);
                formdata.append('chunk', chunk);
                formdata.append('chunks', chunks);
                formdata.append('file', file);
                await $.ajax({
                    type: "POST",
                    url: "https://file.dga.or.th/api/file/",
                    data: formdata,
                    contentType: false,
                    processData: false,
                    success: function (data) {
                        alert(data.status);
                    }, error: function (jqXHR, textStatus, errorThrown) {
                        let msg = jqXHR.status + ' ' + jqXHR.statusText + '.' + jqXHR.responseText;
                        // show error
                    }, fail: function () { alert('fail:') }
                });
                return result;
            },
        });
        $('#invokeUpload').on('click', async function (e) {
            e.preventDefault();
            let consumerKey = await $.getConsumerKey();
            let file = $('#fuTest')[0].files[0];
            let fileInfo = JSON.stringify({ Name: file.name, ContentType: file.type, Size: file.size, IsPublic: false });
            let signedInfo = await $.signFileInfo(fileInfo);
            if (!signedInfo) return false;
            let accessToken = await $.requestAccessToken(consumerKey, fileInfo, signedInfo);
            if (!accessToken) return false;
            let fr = new FileReader();
            fr.onload = async function (e) {
                let fileData = new Uint8Array(e.target.result);

                let blob;
                let chunk = 0;
                let chunks = Math.ceil(fileData.length / chunkSize);
                for (let i = 0; i < fileData.length; i += chunkSize) {
                    if (i == 0)
                        $('#progress').empty().append('0%');
                    blob = new Blob([fileData.subarray(i, i + chunkSize)]);
                    await $.uploadFile(consumerKey, accessToken, blob, fileInfo, signedInfo, chunk++, chunks);
                    let percentage = Math.round((i + blob.size) * 100 / fileData.length);
                    $('#progress').empty().append(percentage + '%');
                }
            };
            fr.readAsArrayBuffer(file);
        });
    </script>
                        
                        


ตัวอย่างการอัพโหลดไฟล์ด้วย plupload plugin

                        
    <div>
    <div id="filelist">Your browser doesn't have Flash, Silverlight or HTML5 support.</div>
    <br />
    <div id="container">
    <a id="pickfiles" href="javascript:;">[Select files]</a>
    <a id="uploadfiles" href="javascript:;">[Upload files]</a>
    </div><br />
    <pre id="console"></pre>
    </div>
    <script>
        var uploader = new plupload.Uploader({
            runtimes: 'html5,flash,silverlight,html4',
            browse_button: 'pickfiles', 
            container: document.getElementById('container'), 
            url: "https://file.dga.or.th/api/file/",
            chunk_size: '1mb',                                        
            headers: { 'Accept': 'application/json' },
            filters: {
                max_file_size: '10gb',
                mime_types: [
                    { title: "Image files", extensions: "jpg,gif,png" },
                    { title: "Zip files", extensions: "zip" }
                ]
            },
            // Flash settings
            flash_swf_url: '/plupload/js/Moxie.swf',
            // Silverlight settings
            silverlight_xap_url: '/plupload/js/Moxie.xap',
            init: {
                BeforeUpload: function (up, file) {
                    var fileInfo = JSON.stringify({ Name: file.name, ContentType: file.type, Size: file.size, IsPublic: false });
                    var signedFileInfo = $.signFileInfo(fileInfo);
                    if (signedFileInfo) {
                        var token = $.requestAccessToken(fileInfo, signedFileInfo, 'upload');
                        if (token)
                            up.settings.multipart_params = { AccessToken: token, 'Consumer-Key': '1234', FileInfo: fileInfo, SignedFileInfo: signedFileInfo };
                        else
                            up.stop();
                    } else
                        up.stop();
                },
                PostInit: function () {
                    document.getElementById('filelist').innerHTML = '';
                    document.getElementById('uploadfiles').onclick = function () {
                        uploader.start();
                        return false;
                    };
                },
                FilesAdded: function (up, files) {
                    plupload.each(files, function (file) {
                        document.getElementById('filelist').innerHTML += '<div id="' + file.id + '">' + file.name + ' (' + plupload.formatSize(file.size) + ') <b></b></div>';
                    });
                },
                UploadProgress: function (up, file) {
                    document.getElementById(file.id).getElementsByTagName('b')[0].innerHTML = '<span>' + file.percent + "%</span>";
                },
                Error: function (up, err) {
                    document.getElementById('console').innerHTML += "\nError #" + err.code + ": " + err.message;
                }
            }
        });
        uploader.init(); 
    </script>
                        
                        

ในการดาวน์โหลดไฟล์สำหรับไฟล์ที่เป็น Public จะสามารถดาวน์โหลดได้โดยตรงที่ url https://file.dga.or.th/api/file/{fileid} แต่สำหรับไฟล์ที่ไม่ได้เป็น Public นั้นทางระบบที่เป็นเจ้าของไฟล์จะต้องทำการขอ AccessToken สำหรับเข้าถึงไฟล์ก่อนจึงจะสามารถดาวน์โหลดได้ที่ url https://file.dga.or.th/api/file/{fileid}?accesstoken={accesstoken}[&attachment={true/false}]

การขอ AccessToken

ข้อมูลที่ต้องใช้ในการขอ AccessToken
  • Consumer-Key : คือรหัสที่ได้รับจากระบบเมื่อลงทะเบียน
  • FileInfo : คือข้อมูลของไฟล์ที่จะขอดาวน์โหลด มีรูปแบบดังนี้ { FileId: [fileid] }
  • SignedFileInfo : คือข้อมูลของ FileInfo ที่ถูกเข้ารหัสด้วย ConsumerSecret (ConsumerSecret คือรหัสที่ได้รับพร้อมกันกับ Consumer-Key เมื่อได้รับการลงทะเบียนจากระบบ) โดยจะต้องเข้ารหัสผ่าน method Signer.SignedFileInfo(..) จาก library DGA.FileService.Util
URL : https://file.dga.or.th/api/requesttoken/download


การขอ AccessToken

ข้อมูลที่ต้องใช้ในการขอ AccessToken
  • Consumer-Key : คือรหัสที่ได้รับจากระบบเมื่อลงทะเบียน
  • DeletingFileIds : Array ของ file id ที่ต้องการลบ เช่น [ '1','2',...]
URL : https://file.dga.or.th/api/requesttoken/delete


การลบไฟล์

ข้อมูลที่ต้องใช้ในการลบไฟล์
  • Consumer-Key : คือรหัสที่ได้รับจากระบบเมื่อลงทะเบียน
  • DeletingFileIds : Array ของ file id ที่ต้องการลบโดยข้อมูลจะต้องตรงกันกับข้อมูลที่ใช้ขอ AccessToken
  • AccessToken : คือบัตรผ่านชั่วคราวสำหรับการลบไฟล์


ตัวอย่างการลบไฟล์ด้วย JQuery

                        

    <input type="text" id="txtFileId" name="id" /><br />                                        
    <button id="invokeDelete">Delete</button>
    <script>
    $.extend({
        getConsumerKey: async function () {
            let result = null;
            await $.ajax({
                type: 'POST',
                url: '/signer/GetConsumerKey/', //your custom service to get your ConsumerKey.
                success: function (data) {
                    result = data;
                }, error: function (jqXHR, textStatus, errorThrown) {
                    let msg = jqXHR.status + ' ' + jqXHR.statusText + '.' + jqXHR.responseText;
                    // show error
                }, fail: function () { alert('fail:') }
            });
            return result;
        },
        requestDeleteToken: async function (consumerKey, deleteInfo) {
            let result = null;
            await $.ajax({
                type: "POST",
                url: "https://file.dga.or.th/api/requesttoken/delete",
                dataType: 'JSON',
                data: { 'Consumer-Key': consumerKey, DeletingFileIds: deleteInfo },
                async: false,
                success: function (data) {
                    result = data.accessToken;
                }
            });
            return result;
        },
        deleteFile: async function (accessToken, consumerKey, delInfo) {
            let result = null;
            await $.ajax({
                type: "DELETE",
                url: "https://file.dga.or.th/api/file/",
                data: { AccessToken: accessToken, 'Consumer-Key': consumerKey, DeletingFileIds: delInfo },
                async: false,
                success: function (data) {
                    alert(data);
                }, error: function (jqXHR, textStatus, errorThrown) {
                    alert(jqXHR.responseText || textStatus);
                }, fail: function () { alert('fail:') }
            });
            return result;
        }
    });                                        
    $('#invokeDelete').on('click', function () {
        let ids = $('#txtFileId').val().split(',');
        let delInfo = JSON.stringify(ids);
        let consumerKey = await $.getConsumerKey();
        let token = await $.requestDeleteToken(consumerKey, delInfo);
        await $.deleteFile(token, consumerKey, delInfo);
    });
    </script>
                        
                        


ตัวอย่างการลบไฟล์ด้วย C# MVC

                        
        public ActionResult Delete(string id)
        {
            string[] deleteIds = new string[1] { id };
            var token = DGA.FileService.Util.ServiceHelper.RequestDeleteToken("https://file.dga.or.th/api/requesttoken/delete", /*ConsumerKey*/, /*ConsumerSecret*/, deleteIds);
            DGA.FileService.Util.ServiceHelper.DeleteFile("https://file.dga.or.th/api/file/", token, /*ConsumerKey*/, /*ConsumerSecret*/, deleteIds);
            return View("Index");
        }