小程序 uni-app 保存图片到手机相册

本文介绍了一段JavaScript代码,展示了如何在使用微信小程序时获取用户手机相册的写入权限,并在授权后将图片保存到相册的过程。通过uni框架实现的步骤包括检查授权状态、请求授权、文件操作和相册保存。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    // 1.先判断手机相册是否授权;2.授权后再保存到相册
    toSave() {
      uni.showLoading({
        title: "正在生成图片",
        mask: true,
      });
      uni.getSetting({
        success: (res) => {
          if (!res.authSetting["scope.writePhotosAlbum"]) {
            uni.authorize({
              scope: "scope.writePhotosAlbum",
              success: () => { // 授权成功
                uni.hideLoading();
                this.saveImg();
              },

              fail: (res) => {
                uni.hideLoading();
                uni.showToast('无法保存图片,请先授权')
              },
            });
          } else { // 已经授权!
            uni.hideLoading();
            this.saveImg();
          }
        },
      });
    },

    saveImg() {
      const base64Str = this.imgBase64.slice(22), // 注意这里,截掉 data:image/png;base64,
        buffer = uni.base64ToArrayBuffer(base64Str),
        filePath = wx.env.USER_DATA_PATH + "/base64src.png"; // base64src.png 为保存的图片名称

      uni.getFileSystemManager().writeFile({
        filePath, // 先把文件写到临时目录里
        // 方式一:
        data: buffer,
        encoding: "binary",
        // 方式二:
        // data: this.imgBase64.slice(22),
        // encoding: "base64",
        success: (res) => {
          uni.saveImageToPhotosAlbum({
            filePath, // 将临时文件 保存到相册
            success: (res) => {
              uni.showToast('图片保存成功')
            },
            fail: (error) => {
              uni.showToast('图片保存失败')
            },
          });
        },
        fail: (error) => {
          uni.showToast('图片保存失败')
        }
      });
    }
### 如何在 Uni-app 中实现小程序图片上传功能 在 Uni-app 开发中,可以通过调用 `uni.chooseImage` 和 `uni.uploadFile` 这两个核心 API 来完成图片的选择与上传操作[^1]。以下是详细的实现方式: #### 1. 图片选择 使用 `uni.chooseImage` 方法可以让用户从相册或相机中选取一张或多张图片。此方法支持多种参数配置,例如最大可选数量、原图压缩选项等。 ```javascript // 调用 chooseImage 方法来获取本地图片路径 uni.chooseImage({ count: 9, // 默认最多可以选择的图片数目 sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有 sourceType: ['album', 'camera'], // 可以指定图片来源是相册还是相机,默认二者都有 success(res) { const tempFilePaths = res.tempFilePaths; // 获取临时文件路径数组 console.log('Selected images:', tempFilePaths); // 接下来可以将这些图片逐一上传至服务器 uploadImages(tempFilePaths); // 假设定义了一个上传函数 }, fail(err) { console.error('Failed to select image:', err); } }); ``` #### 2. 图片上传 通过 `uni.uploadFile` 方法可以将选定的图片上传到远程服务器。需要注意的是,在实际应用中通常会有一个后台接口用来接收并保存上传的文件。 ```javascript function uploadImages(filePaths) { filePaths.forEach(filePath => { uni.uploadFile({ url: 'https://example.com/upload', // 替换为您的真实服务端 URL 地址 filePath, name: 'file', // 对应后端处理字段名 formData: { user: 'test' }, // 如果有额外的数据需要传递给后端,则可通过此对象附加键值对形式发送过去 success(uploadRes) { console.log('Upload successful!', JSON.parse(uploadRes.data)); }, fail(uploadErr) { console.error('Error during file upload:', uploadErr); } }); }); } ``` 以上代码片段展示了如何利用 Uni-app 提供的基础能力快速构建起一套简单的图片上传机制[^2]。当然,在具体项目实践中还需要考虑诸如错误提示友好化显示、进度条展示等功能增强用户体验的部分。 #### 注意事项 - **权限申请**: 需要确保 App 或者小程序已经获得了访问设备存储空间或者摄像头的相关权限。 - **网络状态检测**: 在执行任何涉及联网的操作之前最好先确认当前是否有可用互联网连接。 - **安全性考量**: 当涉及到敏感资料传输时务必采用 HTTPS 协议保护信息安全;另外也要验证接收到的服务端响应是否合法有效以防恶意攻击。 --- ### 示例总结 综上所述,借助于 Uni-app 的强大生态体系能够非常便捷高效地达成跨平台一致性的图片上传解决方案[^3]。 ```javascript // 完整示例代码 function handleImageSelectionAndUpload() { uni.chooseImage({ count: 9, sizeType: ['original', 'compressed'], sourceType: ['album', 'camera'], success(res) { const tempFilePaths = res.tempFilePaths; function performUpload(path){ uni.uploadFile({ url:'https://yourserverendpoint.com/api/upload', filePath:path, name:'uploaded_file', success(result){console.info(`Uploaded ${path}`,result)}, failure(error){console.warn(`Failed uploading ${path}`,error)} }) } tempFilePaths.map(performUpload); } }); } handleImageSelectionAndUpload(); ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值