微信小程序如何去下载PDF呢

在Ai代码时代 我一开始以为这种下载非常简单的事情 ,在询问多次无果 后,决定还是看文档吧 ``

js 复制代码
// 点击手册项 - 预览和下载PDF

function onManualTap(item: any) {

if (!item.zd_down) {

uni.showToast({ title: '暂无文档', icon: 'none' })

return

}

  


// 拼接完整PDF链接

const baseUrl = getBaseUrl()

const pdfUrl = baseUrl + item.zd_down

uni.showLoading({ title: '预览下载', mask: true })

// 清理文件名中的特殊字符

const safeName = item.title.replace(/[\/\\:*?"<>|]/g, '_')

const filePath = `${wx.env.USER_DATA_PATH}/${safeName}.pdf`

  


uni.downloadFile({

url: pdfUrl,

success: (data) => {

if (data.statusCode === 200) {

uni.getFileSystemManager().saveFile({

tempFilePath: data.tempFilePath,

filePath: filePath,

success: (res1) => {

uni.hideLoading()

uni.openDocument({

filePath: res1.savedFilePath,

fileType: 'pdf',

showMenu: true,

fail: () => {

uni.showToast({ icon: 'none', title: '打开失败' })

},

})

},

fail: () => {

uni.hideLoading()

uni.showToast({ icon: 'none', title: '保存失败' })

},

})

} else {

uni.hideLoading()

}

},

fail: (err) => {

uni.hideLoading()

console.error('网络请求异常:', err)

if (err.errMsg?.includes('url not in domain')) {

uni.showModal({

title: '配置错误',

content: '请在小程序后台将域名加入 downloadFile 合法域名列表',

})

} else {

uni.showToast({ icon: 'none', title: '下载失败,请重试' })

}

},

})

}

这样 然后我就想到了 写一个方法 后续说不定能够用上呢,于是就有了

js 复制代码
/**

* 通用文件下载并打开方法

* @param options 下载配置

*/

export function downloadAndOpen(options: DownloadOptions): void {

const {

url,

fileName,

fileType = 'pdf',

showMenu = true,

loadingTitle = '加载中...',

} = options

  


// 拼接完整文件链接

const baseUrl = getBaseUrl()

const fullUrl = url.startsWith('http') ? url : baseUrl + url

  


// 清理文件名中的特殊字符

const safeName = fileName.replace(/[/\\:*?"<>|]/g, '_')

const filePath = `${wx.env.USER_DATA_PATH}/${safeName}.${fileType}`

  


uni.showLoading({ title: loadingTitle, mask: true })

  


uni.downloadFile({

url: fullUrl,

success: (data) => {

if (data.statusCode === 200) {

uni.getFileSystemManager().saveFile({

tempFilePath: data.tempFilePath,

filePath,

success: (res) => {

uni.hideLoading()

uni.openDocument({

filePath: res.savedFilePath,

fileType,

showMenu,

fail: () => {

uni.showToast({ icon: 'none', title: '打开失败' })

},

})

},

fail: () => {

uni.hideLoading()

uni.showToast({ icon: 'none', title: '保存失败' })

},

})

}

else {

uni.hideLoading()

uni.showToast({ icon: 'none', title: '下载失败' })

}

},

fail: (err) => {

uni.hideLoading()

console.error('下载异常:', err)

if (err.errMsg?.includes('url not in domain')) {

uni.showModal({

title: '配置错误',

content: '请在小程序后台将域名加入 downloadFile 合法域名列表',

})

}

else {

uni.showToast({ icon: 'none', title: '下载失败,请重试' })

}

},

})

}

案例

js 复制代码
downloadAndOpen({

url: item.zd_down,

fileName: item.title,

fileType: 'pdf',

loadingTitle: '加载中...',

})
相关推荐
FungLeo2 小时前
成为全栈·Vue 管理后台篇·分类树与标签管理:层级数据如何落到管理界面
前端·javascript·vue.js·分类树·naive ui·标签管理·前端数据结构
总要学点什么2 小时前
第108篇:三维特效-图片轨迹线效果——把贴图滚成一串箭头,想用它的本色反而整条消失
开发语言·javascript·ecmascript·gis·webgl·材质·cesium
Lank_M5 小时前
白底都占八成,PNG 为何只在图表页赢过 JPG
前端
张一凡935 小时前
给 Coding Agent 加一道"架构闸门":Jin 是如何做到"先审架构、再写代码、不漂移"的
前端·后端·agent
Linye5 小时前
AI 写的 HTML 原型全是空壳?聊聊真实 DOM 交互避坑
前端·人工智能
ZANE5 小时前
纯前端实现的 PDF 与图片互相转换工具技术实现
前端
Swot6 小时前
SvelteKit Remote Functions 使用指南
前端·后端
Cooper256 小时前
三源热榜去重加 AI 摘要:URL 唯一键踩出的三个坑
前端·python
Yk酱228406 小时前
A2UI探索随笔-技术选型
前端
前端繁华如梦6 小时前
# 从 73000 行压缩代码到 TypeScript 模块化:我把一个 Three.js FPS 游戏 1:1 复刻了一遍
前端