微信小程序如何去下载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: '加载中...',

})
相关推荐
福兮说8 小时前
设计稿是 #4A7C6F,页面量出来是 #4B7C6F:HEX、HSL、透明度、canvas 来回转的七个坑
前端·javascript·css·canvas
郑州光合科技余经理8 小时前
海外版外卖加盟:总站与分站配送规则怎么分开管
java·开发语言·前端·后端·uni-app·php·ai编程
小呆呆6669 小时前
副业搞起来,小说,漫画,漫剧的成本优化思路
前端·后端·面试
凤城老人9 小时前
从 PyQt6 到 Electron:给 Edge TTS 做一个“多角色配音机“的踩坑手记
javascript·typescript·electron
Dovis(誓平步青云)9 小时前
浇水提醒刚弹出又消失,植物状态别只存一个百分比
开发语言·前端·javascript·pdf·ecmascript·电脑
码艺-Alimjan10 小时前
Vben Admin 新增维吾尔语 Vben-Modal的关键坑之一
前端·javascript·vue.js
可乐鸡翅yeah_11 小时前
hls.js 手动自定义 http 请求 loader,修改请求头实战
开发语言·前端·javascript·网络协议·http·ecmascript·m3u8在线
IT_陈寒11 小时前
Vite静态资源导入这个坑我帮你们踩过了
前端·人工智能·后端
广州华水科技11 小时前
大坝安全监测解决方案:单北斗GNSS形变监测系统应用与维护
前端
yivifu12 小时前
中文古籍电子书注释集成
前端·javascript·python·beautifulsoup·epub