收藏
回答

小程序里的文件何去何从?

框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
小程序 需求 downloadFile;getFileSystemManager;openDocument 客户端 6.5.3 2.6.0

downloadFile;getFileSystemManager;openDocument

这三个是比较常用的文件相关api,不管是下载到临时路径、小程序隔离存储、直接打开,我们需要的不仅仅是只在自己的微信上通过小程序查看。

我们期望的是交互,是用户和我们的小程序形成一个生态圈,而不是让用户只在一个小小的小程序里边。

但是我们开发者是真的搞不懂微信相关到底是有什么顾虑,只是在自己一个小小的圈子里。再者说,我通过文件接口把文件下载然后打开之后,顺理成章的,肯定是转发给我的好友,但是这么自然的一种操作趋势还能被微信相关产品经理给生生的打断。

没有分享,没有转发,没有交互,我要downloadFile;getFileSystemManager;openDocument这三个接口有什么用,自己做着玩儿?

麻烦微信相关产品不要再孤芳自赏,怡然自得的把自己关在小程序这个小闭环里了。

最后贴上自己的代码,烦请微信官方考虑一下我们开发者的需求,不要只顾自己开心,好吧?

const file_manager = wx.getFileSystemManager();
const file_dir = wx.env.USER_DATA_PATH + "/a";
 
file_manager.access({
  path: file_dir,
  complete:function( result ) {
    let code_msg = result.errMsg;
    if (code_msg.indexOf( 'ok' ) == -1 ) {
      file_manager.mkdir({
        dirPath: file_dir,
        recursive: true,
        complete: function (result) {
          console.log( result );
        }
      });
    }
  }
});
 
wx.downloadFile({
  url:'https://ncstatic.clewm.net/rsrc/2019/0410/15/1cad975df1a49179a2a4a46d7e7cbec0.pdf',
  complete: function(result) {
    if ( result.statusCode != 200 ) {
      return;
    }
 
    file_manager.saveFile({
      tempFilePath: result.tempFilePath,
      filePath:file_dir+'/a.pdf',
      complete:function( result ) {
        // 下载失败
        let code_msg = result.errMsg;
        if (code_msg.indexOf('ok') == -1) {
          return;
        }
        let saved_file_path = result.savedFilePath;
 
        wx.openDocument({
          filePath: saved_file_path,
          fileType: 'pdf',
          complete: function (result) {
            console.log(result);
          }
        });
    //     console.log( saved_file_path );
        // wx.chooseMessageFile({
        //   count:1,
        //   type: 'all',
        //   success(res) {
        //     // tempFilePath可以作为img标签的src属性显示图片
        //     console.log(res );
        //   }
        // });
      }
    });
  }
});


最后一次编辑于  2019-04-10
回答关注问题邀请回答
收藏

6 个回答

  • 黄思程
    黄思程
    2019-04-12

    这个需求我们规划下

    2019-04-12
    有用 3
    回复 2
    • George (乔治)
      George (乔治)
      2019-05-19

      有更新吗?

      2019-05-19
      回复
    • 阿白
      阿白
      2019-05-30

      有更新吗?

      2019-05-30
      回复
  • 小鑫
    小鑫
    2019-04-10

    能看到的兄弟姐妹,麻烦支持一下,让微信官方看到,真实需求,为什么就是紧紧堵着不放出来呢

    2019-04-10
    有用 15
    回复
  • George (乔治)
    George (乔治)
    2019-05-19

    我也很纳闷。ios上打开文档连个菜单都没有,没办法把文档发到手机上。至少微信要让用户选择收藏文件或者发到聊天中。只能在小程序里面看文档毫无用处

    2019-05-19
    有用 2
    回复 2
    • 染柒
      染柒
      2019-05-19

      可以预览文件,却不能保存/收藏文件

      2019-05-19
      回复
    • 攀爬
      攀爬
      2019-05-20

      确实如此,我是一个户外轨迹文件,没有地图,单看轨迹经纬度坐标有个p用。下载后,必须用专门的地图轨迹app打开才有作用。或者微信你增加支持户外轨迹的功能

      2019-05-20
      回复
  • 力
    2019-04-23

    说的太对了 太需要这个功能了

    2019-04-23
    有用 2
    回复
  • 星
    2019-06-04

    楼主正解啊。。。同样是这种需求啊,下载下来的文档只能自己看,啥也不能操作,保存在本地,iPhone上根本不知道在哪。。。

    2019-06-04
    有用
    回复 1
    • MJ-浣
      MJ-浣
      2019-09-29
      问题是安卓用户在哪里找这个文件夹 根本不好操作啊
      2019-09-29
      回复
  • 攀爬
    攀爬
    2019-05-19

    我的代码,供大家参考。大意就是把文件下到微信目录后,换个名字,就可以到一个相对固定的位置(微信文件夹的子文件夹)了。然后提示用户去那里找。再随便吐个槽。


    wx.cloud.downloadFile({

          fileID: track.src, // 文件 ID

          success: res => {

            // 返回临时文件路径

            console.log(res.tempFilePath)

            

            const fs = wx.getFileSystemManager()

            fs.saveFile({

              tempFilePath: res.tempFilePath,

              success: res => { // 变态的微信,限制太死

                console.log("savedFilePath:", res.savedFilePath)

                var newPath = wx.env.USER_DATA_PATH + "/" + track.name

                console.log(newPath)

                fs.rename({ // 这里只能先重命名,再提示队员从指定路径找到对应的轨迹文件了 

                  oldPath: res.savedFilePath,

                  newPath: newPath,

                  success:res=>{

                    console.log("rename result:")

                    console.log(res)

                    const path = "/tencent/MicroMsg/wxanewfiles/你的小程序id/" // 手机路径

                    wx.setClipboardData({

                      data: path,

                      success(res) {

                        wx.showModal({

                          title: '下载成功',

                          content: '由于微信限制,文件只能下载到微信系统目录下,请到:' + path + " 目录下查找该轨迹文件。为方便定位,该目录已经复制到内存中。",

                          showCancel: false,

                        })

                      }

                    })

                  },

                  fail: error => console.log(error),

                })

              }

            })

          }      

        })


    2019-05-19
    有用
    回复 2
    • 染柒
      染柒
      2019-05-20

      IOS 用户开始流泪,这怎么操作


      ps:这种保存方式,80%的微信用户不会操作,信我

      2019-05-20
      2
      回复
    • 攀爬
      攀爬
      2019-05-20回复染柒

      我这就是一个小众的户外运动小程序,ios就管不了那么多了。最终还是得微信开放限制才好用。现在搞得确实太bt了,我也是郁闷了半天才想出来的办法

      2019-05-20
      回复
登录 后发表内容