flask_訪問遠端服務器本地日誌緩存
首先確認按鈕,生成下載的url
# 下載的錯誤日誌的緩存文件夾路徑
cache_filedir = os.path.abspath('.') + '/static/bi_logs/'
# 判斷文件夾是否存在,不存在,就創建
if not os.path.isdir(cache_filedir):
os.mkdir(cache_filedir)
# 緩存文件夾中所有的文件名集合
cache_filedir_set = set(os.listdir(cache_filedir))
# 需要下載的文件名————匹配存儲的文件名規則
filename = gamename + gamelang + '_' + '_'.join([params_dic[key] for key in params_dic]) + '.log'
# 如果在,直接返回本地路徑,不在,請求遠端
if filename in cache_filedir_set:
url = '/static/bi_logs/' + filename
else:
url = return_url(ip, 'admin', 'downloadUserClientLogs', params_dic, session.get('token'))
return url
# 生成的url用於填充下載按鈕(a標籤的href)
在生成的下載按鈕後,執行下載任務(如果,是遠程訪問的url)
if request.method == 'POST':
visit_path = {
'd': '',
'event': '',
'r': '',
'u': '',
'token': '',
}
cache_log_url = request.form.get('cache_log_url')
gamename = request.form.get('gamename')
gamelang = request.form.get('gamelang')
for key in visit_path:
visit_path[key] = request.form.get(key)
visit_path_url = cache_log_url + '?' + '&'.join(
['{}={}'.format(key, value) for key, value in visit_path.items()]) + '&admin=1'
filename_element_list = [name for index, name in enumerate([value for key, value in visit_path.items()])
if index <= 3]
filename = gamename + gamelang + '_' + '_'.join(filename_element_list) + '.log'
step = os.path.sep
bash_path = os.path.abspath('.') + '{}static{}bi_logs{}'.format(step, step, step)
filename_path = bash_path + filename
import requests
# closing 模塊用於訪問遠程鏈接,後臺拿到結果,無需展示
from contextlib import closing
with closing(requests.get(visit_path_url, stream=True)) as response:
with open(filename_path, 'wb') as file:
for data in response.iter_content(128):
file.write(data)
return 'true'
else:
return ''
js代碼
<script>
// ajax 訪問方法
function requestByAjax(url, method, data, callback) {
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) {
if (xhr.status === 200) {
callback(xhr.responseText)
}
}
};
xhr.open(method, url, true);
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
if (method === 'post' && data != null) {
xhr.send(data)
} else {
xhr.send()
}
}
// 點擊確定按鈕
document.getElementById('buttonsubmit').onclick = function () {
gameuserid = document.getElementById('gameuserid').value;
events = $('select[name="events"]').val();
searchtime = document.getElementById('searchtime').value;
gamename = $('select[name="gamename"]').val();
gamelang = $('select[name="gamelang"]').val();
// 獲取下載按鈕
download = document.getElementById('download');
data = 'gameuserid=' + gameuserid + '&' + 'event=' + events + '&' + 'searchtime=' + searchtime + '&' + 'gamename=' + gamename + '&' + 'gamelang=' + gamelang;var r = '1';
{#判斷有沒有選擇日期#}
if (!searchtime){
alert('還沒有選擇查詢時間!!!');
} else{
{#進行文件url的判斷#}
requestByAjax('', 'post', data, function (log_path) {
str_path = "location='" + log_path + "'";
download.setAttribute('onclick', str_path + '; ' + 'judge_change()');
download.style.display = 'block';
});
}
};
// 下載按鈕方法
function judge_change() {
download = document.getElementById('download');
str_path = download.getAttribute('onclick');
start_index = str_path.indexOf("=") + 1;
end_index = str_path.indexOf(';');
is_cache_log_href = str_path.substring(start_index + 1, end_index);
gamename = $('select[name="gamename"]').val();
gamelang = $('select[name="gamelang"]').val();
if (is_cache_log_href.indexOf('/static/bi_logs') === -1) {
data = 'cache_log_url=' + is_cache_log_href.split('?', 1) + '&' + is_cache_log_href.split('?').slice(1).join('?') + '&' + 'gamename=' + gamename + '&' + 'gamelang=' + gamelang;
requestByAjax('cache_log/', 'post', data, function (isTrue) {
if (!isTrue) alert('日誌服務器出錯了,請稍後再試...');
})
}
}
</script>