Uniapp 一键保存所有图片的功能

119 阅读1分钟

Uniapp 一键保存所有图片的功能


1. 检查并申请权限

首先,我们需要检查用户是否授予了保存图片到相册的权限,如果没有,则申请权限。

function checkPermission() {
  uni.getSetting({
    success: function(res) {
      if (!res.authSetting['scope.writePhotosAlbum']) {
        uni.authorize({
          scope: 'scope.writePhotosAlbum',
          success: function() {
            console.log('授权成功');
          },
          fail: function() {
            console.log('授权失败');
          }
        });
      }
    }
  });
}

2. 下载所有图片

准备一个图片 URL 的数组,并使用 uni.downloadFile 下载所有图片。

const imageUrls = ['http://example.com/img1.jpg', 'http://example.com/img2.jpg'];

function downloadImages(imageUrls) {
  return imageUrls.map(url => uni.downloadFile({ url }));
}

3. 依次保存图片到相册

下载所有图片后,依次将图片保存到相册。

function saveImagesOneByOne(index, filePaths) {
  if (index >= filePaths.length) return;
  uni.saveImageToPhotosAlbum({
    filePath: filePaths[index],
    success: function() {
      console.log('第' + (index+1) + '张保存成功');
      saveImagesOneByOne(index + 1, filePaths);
    },
    fail: function(err) {
      console.log('第' + (index+1) + '张保存失败', err);
      saveImagesOneByOne(index + 1, filePaths);
    }
  });
}

4. 整合所有步骤

在主函数中整合上述步骤,确保按顺序执行。

function saveAllImages(imageUrls) {
  checkPermission();
  const downloadPromises = downloadImages(imageUrls);
  Promise.all(downloadPromises).then(responses => {
    const filePaths = responses.map(response => response.tempFilePath);
    saveImagesOneByOne(0, filePaths);
  }).catch(err => {
    console.log('下载图片失败', err);
  });
}

5. 调用主函数

在需要的地方调用 saveAllImages 函数。

saveAllImages(imageUrls);

6. 错误处理和优化

  • 在每个步骤中添加错误处理,确保程序的健壮性。
  • 考虑分批处理图片,以优化性能和用户体验。

7. 真机测试

由于模拟器可能无法保存到相册,建议在真机上进行测试,确保功能正常。