ตัวอย่างการใช้งาน
การขอ 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");
}
การขอ AccessToken
ข้อมูลที่ต้องใช้ในการขอ AccessToken
- Consumer-Key : คือรหัสที่ได้รับจากระบบเมื่อลงทะเบียน
- Criterion : คือเงื่อนไขที่ใช้ในการค้นหาไฟล์
URL : https://file.dga.or.th/api/requesttoken/search
การค้นหาไฟล์
ข้อมูลที่ต้องใช้ในการค้นหาไฟล์
- Consumer-Key : คือรหัสที่ได้รับจากระบบเมื่อลงทะเบียน
- Criterion : คือเงื่อนไขที่ใช้ในการค้นหาไฟล์โดยต้องเป็นเงื่อนไขเดียวกับเงื่อนไขที่ใช้ขอ AccessToken
- AccessToken : คือบัตรผ่านชั่วคราวสำหรับการค้นหาไฟล์
ตัวอย่างการค้นหาไฟล์ด้วย JQuery
<button id="invokeFind">Find</button><pre id="result"></pre>
<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;
},
requestSearchToken: async function (consumerKey, criterion) {
let result = null;
await $.ajax({
type: "POST",
url: "https://file.dga.or.th/api/requesttoken/search",
dataType: 'JSON',
data: { 'Consumer-Key': consumerKey, Criterion: criterion },
success: function (data) {
result = data.accessToken;
}
});
return result;
},
findfile: async function (accessToken, consumerKey, criterion) {
let result = null;
await $.ajax({
type: "POST",
url: "https://file.dga.or.th/api/search/",
dataType: 'JSON',
data: { 'Consumer-Key': consumerKey, 'AccessToken': accessToken, 'Criterion': criterion },
success: function (data) {
result = data;
}, error: function (jqXHR, textStatus, errorThrown) {
alert(jqXHR.responseText || textStatus);
}, fail: function () { alert('fail:') }
});
return result;
}
});
$('#invokeFind').on('click', function () {
let consumerKey = await $.getConsumerKey();
let criterion = JSON.stringify({ Keyword: '', IsComplete: null, Page: 1, PageSize: 20 });
let token = await $.requestSearchToken(consumerKey, criterion);
let result = await $.findfile(token, consumerKey, criterion);
let strResult = '';
strResult += 'Total : ' + result.total + '<br />';
$.each(result.results, function (index, data) {
strResult += JSON.stringify(data) + '<br />';
});
$('#result').html(strResult);
});
</script>