Vue aタグはクリックしてダウンロードすることを実現して、画像、txtファイルをダウンロードして、直接開く方式ではありません
9082 ワード
この間、プロジェクトでファイルをダウンロードする必要があることに遭遇し、以前にカプセル化されたダウンロードコマンドを直接取り出し、jpg、txtファイルをダウンロードする際に、直接ダウンロードするのではなく、ブラウザでファイルを開き、aラベルにdownload属性を追加しても始まらないことに気づいた.私は先に前のパッケージの命令を贴り出して、もしダウンロードのファイルのタイプがExact、Word、Pdfフォーマットのだけならば直接持って使うことができて、もしその他のファイルのタイプの需要があるならば、引き続き文章の下で见ることができます Exact、Word、Pdf形式ダウンロード をサポートダウンロードファイルにjpg、txtなどのブラウザが直接プレビューできるファイルが存在する場合、上記の方法で問題が発生し、downloadを追加してもブラウザでダウンロードファイルを開くことができます.ダウンロードアドレスをBlobでバイナリに変換し、aラベルのhref属性としてdownload属性に合わせてダウンロードを実現することができます.具体的な実装コードは以下の通りである:
エクスポート機能をしている場合、リクエストヘッダにtokenを携帯する必要がある場合は、私の別の記事を参考にしてください.https://blog.csdn.net/lhz_19/article/details/105784299
let baseDownloadUrl = 'https://xxxxx.cn' //
// v-down
Vue.directive('down', {
inserted: (el, binding) => {
el.style.cssText = 'cursor: pointer;color:red;'
el.addEventListener('click', () => {
console.log(binding.value)
let link = document.createElement('a') // a
link.style.display = 'none'
link.href = baseDownloadUrl + binding.value //
link.setAttribute('download', '') // downLoad
document.body.appendChild(link)
link.click()
})
}
})
Vueページでの命令v-downの使用<span v-down="item.Url">( )</span>
Vue.directive('down', {
inserted: (el, binding) => {
el.style.cssText = 'cursor: pointer;color:write;'
el.addEventListener('click', () => {
console.log(binding.value)
let link = document.createElement('a')
let url = baseDownloadUrl + binding.value
// url blob ,
fetch(url).then(res => res.blob()).then(blob => { // blob
link.href = URL.createObjectURL(blob)
console.log(link.href)
link.download = ''
document.body.appendChild(link)
link.click()
})
})
}
})
Vueページでの命令v-downの使用<span v-down="item.Url">( )</span>
上記の方法は、上記の方法を少し調整して、アドレスを変換して、jpg、txtファイルのダウンロードを実現するだけです.もっと良い方法があれば、皆さんに教えてください.エクスポート機能をしている場合、リクエストヘッダにtokenを携帯する必要がある場合は、私の別の記事を参考にしてください.https://blog.csdn.net/lhz_19/article/details/105784299