收藏
回答

使用writeFile方法将文件流写入到本地用openDocument方法打开后,pdf是空白的?

回答关注问题邀请回答
收藏

7 个回答

  • D.
    D.
    2024-07-02

    代码如下:

    export function downAttachment(url) {
    	//加载框动画
    	uni.showLoading({
    		title: '正在下载……'
    	});
    	uni.downloadFile({
    		url,
    		success: (data) => {
    			if (data.statusCode === 200) {
    				//隐藏加载框
    				uni.hideLoading();
    				//文件保存到本地
    				uni.saveFile({
    					tempFilePath: data.tempFilePath, //临时路径
    					success: function(res) {
    						// console.log('打印res',res)
    						uni.showToast({
    							icon: 'success',
    							mask: true,
    							// title: '文件已保存:' + res.savedFilePath, //保存路径
    							title: '下载成功',
    							duration: 2000,
    						});
    
    
    						//自动打开文档查看
    						setTimeout(() => {
    							const filePath = res.savedFilePath;
    							uni.openDocument({ //新开页面打开文档,支持格式:doc, xls, ppt, pdf, docx, xlsx, pptx。
    								filePath: filePath,
    								showMenu: true,
    								success: function(res) {
    									console.log('打开文档成功');
    								}
    							});
    						}, 2000)
    					}
    				});
    			}
    		},
    		fail: (err) => {
    			uni.showToast({
    				icon: 'none',
    				mask: true,
    				title: '文件下载失败',
    			});
    		},
    	});
    }
    
    2024-07-02
    有用
    回复 4
    • 兰馨
      兰馨
      2024-07-11
      解决了吗
      2024-07-11
      回复
    • YYXX👻
      YYXX👻
      2024-12-02
      解决了嘛
      2024-12-02
      回复
    • black
      black
      08-28
      解决了吗
      08-28
      回复
    • D.
      D.
      09-02回复black
      代码贴了,你试试看。
      09-02
      回复
  • 我终于可以有个昵称
    我终于可以有个昵称
    2023-04-25

    请问解决没有呢?同样的问题,空白,页码正确

    2023-04-25
    有用
    回复 1
    • G
      G
      2023-08-09
      看request有没有配置responseType: 'arraybuffer'//用于读取转换
      2023-08-09
      回复
  • yang
    yang
    2022-03-08

    后端返回的二进制数据,返回前用 base64 编码一下,小程序那里直接用 base64 去解析就可以

    2022-03-08
    有用
    回复 1
    • 左耳击水兽
      左耳击水兽
      2022-10-11
      我想知道怎么转,用了方法都没用,请教一下
      2022-10-11
      回复
  • Tsui
    Tsui
    2021-06-17

    ...

    2021-06-17
    有用
    回复
  • 家乡
    家乡
    2021-05-10

    现在这个版本微信浏览器打开pdf链接 统一都有这个问题的。

    2021-05-10
    有用
    回复
  • Z
    Z
    2021-04-19

    搞个代码片段

    2021-04-19
    有用
    回复 9
    • T.T
      T.T
      2021-04-19
      2021-04-19
      回复
    • Z
      Z
      2021-04-19回复T.T
      。。。 看一下这个  https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html (写一个能够出现的代码片段贴在你的帖子上 这样别人也能看到帮你解决)
      2021-04-19
      回复
    • T.T
      T.T
      2021-04-19
      这样的行不行,直接给微信开发者工具的片段我不知道怎么弄,代码里面的app.globalData.Request.postRequest是接口 的请求,那里也配置了header.responseType = arraybuffer
      2021-04-19
      回复
    • Z
      Z
      2021-04-19回复T.T
      打开空白有报错吗
      2021-04-19
      回复
    • T.T
      T.T
      2021-04-19回复Z
      我们这里有网络限制,贴出来代码片段,接口啥的应该也请求不了。。。。。
      2021-04-19
      回复
    查看更多(4)
  • 安逸
    安逸
    2021-04-19

    下载 然后 打开

    wx.downloadFile({
      // 示例 url,并非真实存在
      url: 'http://example.com/somefile.pdf',
      success: function (res) {
        const filePath = res.tempFilePath
        wx.openDocument({
          filePath: filePath,
          success: function (res) {
            console.log('打开文档成功')
          }
        })
      }
    })
    
    2021-04-19
    有用
    回复 3
    • T.T
      T.T
      2021-04-19
      现在是在这个pdf里面加上水印,所以得识别流文件,这种方式打的开,我试过了,但是用这种写入本地的,打开就不行
      2021-04-19
      回复
    • T.T
      T.T
      2021-04-19
      刚刚代码没有贴全,这些是全的 
      let newPath = wx.env.USER_DATA_PATH+ '/' + e.currentTarget.dataset.item.annexName
            let that = this
            app.globalData.Request.postRequest("doc-manage/docInfo/download?docCode=" + e.currentTarget.dataset.item.docCode + '&annexCode=' + e.currentTarget.dataset.item.annexCode, prams,
              function (res) {
                const fs = wx.getFileSystemManager(); //获取全局唯一的文件管理器
                fs.writeFile({
                  filePath: newPath, // wx.env.USER_DATA_PATH 指定临时文件存入的路径,后面字符串自定义
                  data: res,
                  // encoding: "application/json;charset=UTF-8", //二进制流文件必须是 binary
                  // encoding: "application/json", //二进制流文件必须是 binary
                  encoding: "binary", //二进制流文件必须是 binary
                  fail(err) {
                    console.log("调用失败",err)
                  },
                  success (res){
                    console.log("获取的地址",newPath)
                    wx.openDocument({ // 打开文档
                      filePath:newPath, //拿上面存入的文件路径
                      fileType:'pdf',
                      fail(ree) {
                        console.log("这个失败是什么",ree)
                      },
                      success: function (res) {
                        setTimeout(()=>{wx.hideLoading()},500)
                      }
                    })
                  },
                })
              },
              function (err) {
                console.log("err", err)
              })
      2021-04-19
      回复
    • 柠檬茶
      柠檬茶
      2021-07-26
      请求回来的流是不是对的?
      2021-07-26
      回复
登录 后发表内容