天天看點

.netcore vues實作https下載下傳

[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)
  }
}