[HttpGet("ExportPolicy")]
public FileStreamResult ExportPolicy(string id)
{
var data = service.ExportPolicy(id);
Stream stream = new MemoryStream(data.Data);
return File(stream, "application/x-compressed");
}
RequestModel<byte[]> ExportPolicy(string id);
public RequestModel<byte[]> ExportPolicy(string id)
{
try
{
RequestModel<byte[]> results = null;
var config = configService.GetConfig(id, ref results);
var data = baseService.GetGatekeeperResult<ExportPolicyModel>("", Urls.EXPORT_URL, config.MgtIp, config.Port);
if (data != null)
{
if (data.IsSuccess)
{
results.IsSuccess = data.Data.IsSuccess;
results.Data = GetFileByHttps(string.Format("https://{0}{1}", config.MgtIp, data.Data.Path));
}
else
{
results.IsSuccess = false;
results.ErrorMsg = data.ErrorMsg;
}
}
return results;
}
catch (System.Exception ex)
{
loggerHelper.Error("網閘導出規則清單失敗", ex);
throw ex;
}
}
private byte[] GetFileByHttps(string url)
{
try
{
byte[] bytes = null;
if (!string.IsNullOrEmpty(url))
{
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11;
WebClient webClient = new WebClient();
webClient.Headers.Add(HttpRequestHeader.UserAgent, "Other");
webClient.Headers.Add(HttpRequestHeader.Accept, "application/x-compressed");
bytes = webClient.DownloadData(url);
}
return bytes;
}
catch (Exception ex)
{
loggerHelper.Error("網閘導出規則清單失敗", ex);
throw ex;
}
}
private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors) => true;
vue:
export function ExportPolicy(data) {
return request({
url: publicConst.prefixSoc + '/GatekeeperSynchronize/ExportPolicy',
method: 'get',
timeout: timeout,
params: {
id: data
},
responseType: 'blob'
})
}
async exportFile() {
this.$confirm('您确?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'info'
}).then(() => {
this.loading = true
ExportPolicy(this.id).then(res => {
if (res.size > 0 && res !== null) {
var name = 'policy' + '.tgz'
download(res, name)
this.$message.success('資料導出成功')
this.loading = false
} else {
this.$message.success('資料導出失敗')
this.loading = false
}
}).catch(error => {
this.$message.error(error)
this.loading = false
})
})
},
export function download(data, fileName) {
if (!data) {
return
}
const blob = new Blob([data], { type: 'application/x-compressed' })
if ('download' in document.createElement('a')) {
const url = window.URL.createObjectURL(blob)
const link = document.createElement('a')
link.style.display = 'none'
link.href = url
link.setAttribute('download', fileName)
document.body.appendChild(link)
link.click()
document.body.removeChild(link)
window.URL.revokeObjectURL(url)
} else { // IE 10+
window.navigator.msSaveBlob(blob, fileName)
}
}