uni-app实现app照片读写(项目绝对路径)

698 阅读1分钟

<image v-else :src="currentUrl" draggable @click="takeFn">

currentUrl为绝对路径

    //点击元素拍照
    takeFn(){
      uni.chooseImage({
        count: 1,
        sizeType: "compressed",
        sourceType: ["camera", "album"],
        success: async (res) => {
          const tempFilePaths = res.tempFilePaths[0];
          const fileUrl = await this.copyImageToAttachment(tempFilePaths);
          this.currentUrl=fileUrl
        },
      });
    },
    // 获取本地存储附件文件夹 DirectoryEntry对象
    getDirectoryEntry() {
      return new Promise((resolve, reject) => {
        // 获取本地文件系统对象
        plus.io.requestFileSystem(
          plus.io.PUBLIC_DOCUMENTS,
          (fileSystem) => {
            // 创建或打开当前目录指定的目录, 目的是获取附件目录
            fileSystem.root.getDirectory(
              "scorePhoto",
              { create: true }, // 不存在则创建
              (attachmentEntry) => {
                // 返回附件目录对象
                resolve(attachmentEntry);
              },
              (error) => {
                console.log("打开或创建附件目录失败");
                reject(error);
              }
            );
          },
          (error) => {
            console.log("获取文件系统对象失败");
            reject(error);
          }
        );
      });
    },
    // 复制图片至附件目录, 返回复制成功图片的绝对路径
    async copyImageToAttachment(path) {
      const attachment = await this.getDirectoryEntry();
      return new Promise((resolve, reject) => {
        // 通过URL参数获取目录对象或文件对象, 获取拍照/相册临时图片
        plus.io.resolveLocalFileSystemURL(
          path,
          (fileEntry) => {
            fileEntry.copyTo(
              attachment,
              this.setCopyImageName(fileEntry.name),
              (newFileEntry) => {
                resolve(newFileEntry.fullPath);
              },
              (error) => {
                console.log("复制图片失败");
                reject(error);
              }
            );
          },
          (error) => {
            console.log("获取拍照临时图片失败");
            reject(error);
          }
        );
      });
    },
    // 设置复制的图片名称
    setCopyImageName(fileName) {
      const ext = this._getFileExt(fileName);
      const time = new Date().getTime();
      const RandomNum = Math.floor(Math.random() * 100000);
      return `${time}_${RandomNum}${ext}`;
    },
    // 获取文件名后缀
    _getFileExt(fileName) {
      if (!fileName) {
        throw new Error("文件名不存在");
      }
      const index = fileName.lastIndexOf(".");
      return index <= -1 ? "" : fileName.substring(index);
    },
    // 删除本地图片
    delImageByUrl(url) {
      plus.io.resolveLocalFileSystemURL(
        url,
        (fileEntry) => {
          fileEntry.remove(
            () => {
              uni.$toast.success('删除图片成功')
            },
            () => {
              uni.$toast.error('删除图片失败')
              console.log("删除图片失败", error);
            }
          );
        },
        (error) => {
          console.log("删除图片-获取图片失败", error);
        }
      );
    },