2017年7月14日 星期五

Angular2 Binary to File

// 定義以 Get 的方法下載檔案 (網址, 檔案名稱, Loading Mask)
getDownloadRequest(url: string, fileName: string, useMask?: boolean) {
// 開啟Loading Mask
if (useMask === undefined || useMask) {
this._uiComponent.showLoading();
}
// 定義常數 headers 並且新增自定義 header
const headers = new Headers();
headers.append('Content-Type', 'application/json');
headers.append('Authorization', 'JAuth ' + localStorage.getItem('auth'));

// 新增忽略快取機制
if (url.includes('?')) {
url = url + '&_liwei=' + new Date().getTime();
} else {
url = url + '?_liwei=' + new Date().getTime();
}

// 定義常數 requestoptions 並且設定請求參數
const requestoptions = new RequestOptions({
method: RequestMethod.Get,
url: url,
headers: headers
});

// 實際發出請求 並且判斷特定請求代碼
return this.http
.request(new Request(requestoptions))
.map((res: Response) => {
if (useMask === undefined || useMask) {
// 關閉 Loading
this._uiComponent.closeLoading();
}
// 請求成功時 回傳 json
if (res) {
if (res.status === 201) {
return res.json();
} else if (res.status === 200) {
// 取得二進位編碼檔案
const binaryData = [];
binaryData.push(res['_body']);
const file = window.URL.createObjectURL(new Blob(binaryData));
// 產生超連結下載
const a = document.createElement('a');
a.href = file;
a.download = fileName;
document.body.appendChild(a);
a.click();
// 自動刪除
window.onfocus = function () {
document.body.removeChild(a);
};
return res;
}
}
// 請求失敗時
}).catch((error: any) => {
if (useMask === undefined || useMask) {
// 關閉 Loading
this._uiComponent.closeLoading();
}
if (error.status === 500) {
// this._uiComponent.errorDialog('未預期的伺服器錯誤');
return Observable.throw(error);
} else if (error.status === 403) {
this._uiComponent.errorDialog('憑證授權已過期');
setTimeout(() => {
this.loggingOut();
}, 1000);
} else {
// 判定最近伺服器常出現的錯誤 -> 405 - 不允許用來存取此網頁的 HTTP 指令動詞。
if (error.status === 405) {
// 錯誤訊息
this._uiComponent.errorDialog('不允許用(GET)來存取此網頁的 HTTP 指令動詞');
// 回傳非 Json 才不會錯
return Observable.throw(error);
// 相同來源錯誤
} else if (error.status === 404) {
// 錯誤訊息
// this._uiComponent.errorDialog('網頁不存在');
// 回傳非 Json 才不會錯
return Observable.throw(error);
} else {
if (error.toString().includes('Unexpected')) {
// 錯誤訊息
console.log(url + ' 不存在');
// 回傳 Json
return Observable.throw(error);
} else {
// 如果沒有 success 代表 api 端給了錯誤格式
if (error.json()['success'] !== undefined) {
// 錯誤訊息
this._uiComponent.errorDialog(error.json()['message']);
}
// 回傳 Json
return Observable.throw(error.json());
}
}
}
});
}

沒有留言:

張貼留言

remove last word from SQL query

SET @columnSql = SUBSTRING ( @columnSql , 1 , LEN ( @columnSql ) - 1 )