JavaScript+WebAPIでシステム構築をしていると意外と悩むのがファイルダウンロード、アップロード。
多くの場合はWebAPIでダウンロードファイルの情報を照会して別途ダウンロードを行ったり
サーバー上にファイルをアップロードしてからWebAPIを呼び出して更新処理を行う方法が
一般的だったが、最近はWbAPIを使って直接ファイルのアップロード、ダウンロードを行うことができる。(疑似的だが)
■ダウンロード
[code]
var data = {
"layer_no": layer_no,
"point_no": point_no,
"crc": crc
};
m_web_service.call("exportPtaPolygon",
function (data, textStatus, xhr) {
if(!cmn_is_null(data.d)){
if(cmn_is_null(data.d.lats)){
m_common.MsgBox("エクスポート", "エクスポート対象のデータはありません", 0, 0);
m_window.Close("600");
return;
}
var csv = "";
for(var i = 0 ; i < data.d.lats.length ; i++){
csv = csv + data.d.lats[i] + "," + data.d.lons[i] + "\r\n";
}
let downloadData = new Blob([csv], {type: ‘text/csv’});
let filename = ‘PTA.csv’
if (window.navigator.msSaveBlob) {
window.navigator.msSaveBlob(downloadData, filename); // IE用
} else {
let downloadUrl = (window.URL || window.webkitURL).createObjectURL(downloadData);
let link = document.createElement(‘a’);
link.href = downloadUrl;
link.download = filename;
link.click();
(window.URL || window.webkitURL).revokeObjectURL(downloadUrl);
}
m_window.Close("600");
}
else{
}
},
m_common.dummy_function,
data);
[/code]
■アップロード
[code]
var fileref = document.getElementById(id);
var reader = new FileReader();
reader.onload = function(theFile){
var outhtml = theFile.target.result;
var recs = outhtml.split("\r\n");
if(recs.length < 4){
m_common.MsgBox("インポート", "正しいファイルを指定してください", 400, 200);
return;
}
var xs = [];
var ys = [];
for(var n = 0 ; n < recs.length ; n++){
let yx = recs[n].split(",");
if(yx.length == 2){
ys.push(parseFloat(yx[0]));
xs.push(parseFloat(yx[1]));
}
}
var data = {
"layer_no": layer_no,
"point_no": point_no,
"crc": crc,
"xs" : xs,
"ys" : ys,
"user_no" : String(m_master.user_no)
};
m_common.waitmsg_on();
m_web_service.call("importPtaPolygon",
function (data, textStatus, xhr) {
m_common.waitmsg_off();
if(data.d){
m_common.MsgBox("インポート", "インポートしました", 400, 200);
}
else{
m_common.MsgBox("インポート", "インポートできません", 400, 200);
}
m_window.Close("600");
},
m_common.dummy_function,
data);
}
reader.readAsText(fileref.files[0], "shift-jis");
[/code]