JS多种方式的文件下载

第一种情况:有接口返回的blob文件流,有文件名称,但是没有文件格式的情况下:
详见代码:

点击查看代码

/**
 *下载blob文件
 *@param data blob数据
 *@param filename 文件名
 */
export function downloadFile(data, filename) {
  if (!data) {
    return
  }
  const link = document.createElement('a')
  const blob = new Blob([data], { type: 'application/vnd.ms-excel' })
  link.style.display = 'none'
  link.href = URL.createObjectURL(blob)
  // 指定下载文件的格式
  link.setAttribute('download', filename + '.xls')
  document.body.appendChild(link)
  link.click()
  document.body.removeChild(link)
}

第二种情况:有接口返回的blob文件流,有文件名称,有文件格式的情况下:
详见代码:

点击查看代码

/**
 *下载blob文件
 *@param data blob数据
 *@param filename 文件名自带文件格式
 */
export function downloadFileType(data, filename) {
  if (!data) {
    return
  }
  const link = document.createElement('a')
  const blob = new Blob([data], { type: 'application/vnd.ms-excel' })
  link.style.display = 'none'
  link.href = URL.createObjectURL(blob)
  // 默认的格式下载
  link.setAttribute('download', filename)
  document.body.appendChild(link)
  link.click()
  document.body.removeChild(link)
}

第三种情况:有接口返回的下载文件地址,有文件名称,有文件格式的情况下:
详见代码:

点击查看代码

/**
 *下载文件
 *@param url 下载文件地址
 *@param filename 文件名自带文件格式
 */
export function downUrlFileType(url, filename) {
  if (!url) {
    return
  }
  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)
}