Изображения апплета Wechat сохраняются в локальной разовой проблеме.

внешний интерфейс Апплет WeChat
Изображения апплета Wechat сохраняются в локальной разовой проблеме.

задний план

Недавно я получил небольшую программу для локального сохранения QR-кода, чтобы пользователи могли делиться им для продвижения. Глядя на, казалось бы, простое небольшое требование, на самом деле оно довольно хлопотное, поэтому я поделюсь им с вами (в этом проекте используетсяTaroАпплет такой же).

шаг

ПроверитьДокументацияОткрытие доступно и просто.

код показывает, как показано ниже

// 图片下载
async downloadImage() {
  try {
    /**
    * @param {String} src  网络图片地址
    */
    const { path } = Taro.getImageInfo({ src })

    // 保存到相册
    const saveRet = await Taro.saveImageToPhotosAlbum({ filePath: path })

    if(saveRet.errMsg == 'saveImageToPhotosAlbum:ok') {
      Taro.showToast({
        title: '图片保存成功'
      })
    }
    
  } catch (error) {
    console.log(error)
  }
}

Вроде бы все закончилось, но на самом деле еще рано, это только начало, и волнение позади.

Разрешить

Для вызова альбома требуется авторизация пользователя. Если пользователь авторизован, все в порядке. Если нет авторизации (пользователь отказывается), загрузка изображения не может быть выполнена снова, и нет подсказки, и взаимодействие с пользователем чрезвычайно Бедный Что мне делать?

Лучший способ — направлять пользователя. Если пользователь решит отказаться, когда пользователь снова откроет эту страницу, мы заменим кнопку загрузки авторизованным альбомом. Помогите пользователям вручную открыть разрешение альбома для загрузки изображений.

Вставьте код для справки

async openSetting() {
  // 打开设置(手动授权)
  const ret = await Taro.openSetting()
  if(ret.authSetting['scope.writePhotosAlbum']) {
    this.setState({
      writePhotosAlbum: true // 权限开启状态
    })
  }
}

совместимость

Я думал, что это конец, но одноклассники QA снова пришли его искать, на некоторые телефоны Android он не загружался, и он появлялся по клику.спастиНичего не происходит (не удалось распознать тип файла).

обнаружил, что это былоgetImageInfoЭтот метод не может получить информацию об изображении, и сообщается об ошибке, и я паникую, чтобы узнать, есть ли альтернатива.downloadFileОн используется для сохранения файла в локальный кеш и хранения временного адреса. Думая, что картинка на самом деле является файлом, попробуйте посмотреть, можно ли этого добиться этим методом.

  // 获取临时文件路径
  const filePath = `${wx.env.USER_DATA_PATH}/${Date.now()}.jpg`
  // 通过获取本地临时文件路径进行图片的保存,此文件路径是我们自己指定了文件类型,所以不会出现文件类型识别失败的情况。
  const { path } = await Taro.downloadFile({
    url,
    filePath // 强行指定文件类型(.jpg)
  })
  // 图片保存
  const saveRet = await Taro.saveImageToPhotosAlbum({
    filePath: path
  })

  if(saveRet.errMsg == 'saveImageToPhotosAlbum:ok') {
    Taro.showToast({
      title: '图片保存成功'
    })

    // 保存成功之后移除缓存释放机身空间
    let fileMgr = Taro.getFileSystemManager()

    fileMgr.unlink({ filePath })
  }

После того, как это будет достигнуто, этого можно будет избежать.getImageInfoЕсли тип изображения (.png|.jpg) не подходит, если вы столкнулись с подобными сценариями, вы можете попробовать изменить сохраненный код на указанный выше, что может избежать некоторых ненужных проблем, если есть лучше Пожалуйста, сообщите нам метод, и добро пожаловать для изучения и обсуждения вместе. Желаем вам успехов в работе!

Ссылаться на

  • Путь к каталогу пользователя в файловой системеwx.env.USER_DATA_PATH
  • Получить информацию об изображенииgetImageInfo

Подписывайтесь на нас

公众号@前端论道