微信小程序文件下载两种方式

1. 基本url方式下载(自定义下载文件名称)
  downloadDailyYear: function() {
    util.get(api.downloadDailyYear).then(function(res) { // 自定义get请求,可忽略
      if (res.code == 200) {
        var fileName = res.data.substring(res.data.lastIndexOf("/") + 1, res.data.indexOf("."));
        wx.downloadFile({
          url: api.appUrl + res.data,     
          // 1. 必须带有这个wx.env.USER_DATA_PATH,表示存储在用户本地 !!!
          // fileName表示自定的文件名称
          // 实际在PC端调试存储位置为类似 C:\Users\SJshe\AppData\Local\微信开发者工具\User Data\WeappFileSystem\o6zAJs3c0u3SeBVn_9MUgG6UZJ1M\wx2efdf4edd8bccb88
          filePath: wx.env.USER_DATA_PATH + "/" + fileName,
          success: function (res) {
            if (res.statusCode === 200) {
              wx.openDocument({
                filePath: res.filePath,
                fileType: ['xlsx'], // 2. 这个必须写合法类型,不然下载不了(个人认为官方应该特别说明) !!!
                success: function (res) {
                  console.log('打开文档成功')
                },
                fail: function(e) {
                  console.log(e.errMsg);
                }
              })
            }
          },
          fail: function(e) { // 强烈建议打印失败原因,便于排查
            console.log(e.errMsg);
          }
        });
      }
    });
  },
2. 基于后台返回流的方式下载
@GetMapping(value = "/downloadDailyYear")
public BaseResponse<byte[]> downloadDailyYear(HttpSession session, @RequestParam String id, 
		@RequestParam @DateTimeFormat(iso = ISO.DATE) Date startDate, 
		@RequestParam @DateTimeFormat(iso = ISO.DATE) Date endDate) {
}
public class BaseResponse<T> {
    private String code;
    private String message;
    private T data;
    ...
}
downloadDailyYear: function () {
    var name = '';
    wx.getStorage({
      key: 'userInfo',
      success(res) {
        name += res.data.name + res.data.employeeNo;
      }
    })
    
    var year = new Date().getFullYear();
    util.get(api.downloadDailyYear, {
      'id': wx.getStorageSync('userId'),
      'startDate': year + "-" + "01-01", 
      'endDate': year + "-" + "12-31"
    }).then(function (res) {
      if (res.code == 200) {
      	// 1. 必须带有这个wx.env.USER_DATA_PATH,表示存储在用户本地 !!!
        var filePath = wx.env.USER_DATA_PATH + '/' + year + '工作周报-' + name;
        FileSystemManager.writeFile({
          filePath: filePath,
          data: res.data,
          encoding: 'base64', // 2. base64解密写入, 后台返回的byte[]数组是经过base64编码的,其他方式写入文件打开格式不对
          success: function(res) {
            wx.openDocument({
              filePath: wx.env.USER_DATA_PATH + '/' + year + '工作周报-' + name,
              fileType: ['xlsx'], // 3. 这个必须写合法类型,不然下载不了 !!!
              success: function (res) {
                console.log('打开文档成功')
              },
              fail: function (e) {
                console.log(e.errMsg);
              }
            })
          },
          fail: function (e) {
            console.log(e.errMsg);
          }
        });
      }
    });
  },

欢迎关注微信公众号算法小生

你可能感兴趣的:(干货,微信小程序)