雲計算

HaaS UI小程序解決方案基礎教學之五: JSAPI文件管理

名詞解釋

AliOS Things: 阿里雲智能IoT團隊自研的物聯網操作系統

HaaS:全稱是Hardware as a Service,阿里雲智能IoT團隊基於AliOS Things系統推出的硬件即服務

HaaS UI:全稱是Hardware as a Service User Interface,是源自AliOS Things操作系統上的一套應用&圖形解決方案,支持C/C++和 JS兩種開發語言

1、 File JSAPI簡介

File JSAPI是HaaS UI提供的一個輕量級文件接口,特別適用於存儲小程序運行所需的文件,如文本、圖片、視頻等資源文件,這些文件都可以通過File JSAPI來存取。

File JSAPI的作用域為當前小程序應用,包含的接口如下:

接口宿主 JSAPI 調用方法 接口功能
file saveFile $falcon.jsapi.file.saveFile({apFilePath: 'xxx'}) 文件管理
getSavedFileInfo $falcon.jsapi.file.getSavedFileInfo({apFilePath: 'xxx'})
getFileInfo $falcon.jsapi.file.getFileInfo({apFilePath: 'xxx'})
getSavedFileList $falcon.jsapi.file.getSavedFileList({})
removeSavedFile $falcon.jsapi.file.removeSavedFile({apFilePath: 'xxx'})

1.1、 file.saveFile

file.saveFile是保存文件到本地(本地文件大小總容量限制:10 MB)的 API。

調用 my.saveFile 成功後,可在"MINIAPP_DATAROOT file/appid/"路徑下查看保存的文件,其中appid是小程序的id。

入參

Object 類型,屬性如下:

屬性 類型 必填 描述
apFilePath String 文件路徑。
callback Function 回調函數,包含result參數。

示例代碼

file.saveFile({
  apFilePath: 'd:\\demo.jpg',
}, result => {console.log(result)});

success 回調函數

屬性 類型 描述
apFilePath String 文件保存路徑。

1.2、 file.getSavedFileInfo

file.getSavedFileInfo 是獲取"MINIAPP_DATAROOT file/appid/"路徑下保存的所有文件信息的 API,其中appid是小程序的id。

入參

入參為Object類型,屬性如下:

屬性 類型 必填 描述
apFilePath String 文件路徑。
callback Function 回調函數,包含result參數。

示例代碼

file.saveFile({
  apFilePath: 'd:\\demo.jpg',
}, result => {
  result && !result.error && file.getSavedFileInfo({
    apFilePath: result["apFilePath"],
  }, result => {console.log(result)});
});

1.3、file.getFileInfo

getFileInfo 是獲取文件信息的 API。

入參

入參為Object類型,屬性如下:

屬性 類型 必填 描述
apFilePath String 文件路徑。
callback Function 回調函數,包含result參數。

示例代碼

file.getFileInfo({
  apFilePath: "/data/mini_app/file/0000000000000001/demo.jpg",
}, result => {console.log(result)});

success 回調函數

入參為Object類型,屬性如下

名稱 類型 描述
size Number 文件大小。
digest String 摘要結果。

1.4、 file.getSavedFileList

file.getSavedFileList 是獲取保存的所有文件信息的 API。

入參

Object 類型,屬性如下:

屬性 類型 必填 描述
appId String 小程序的 appId。
callback Function 回調函數,包含result參數。

示例代碼

file.getSavedFileList({
}, result => {
  result && !result.error && console.log(result);
});

success 回調函數

屬性 類型 描述
fileList List 文件列表。
column1 column2 column3
column1 column2 column3

File 對象屬性

屬性 類型 描述
size Number 文件大小。
createTime Number 創建時間。
apFilePath String 文件路徑。

1.5、 file.removeSavedFile

file.removeSavedFile 是刪除某個保存的文件的 API。

入參

Object 類型,屬性如下:

屬性 類型 必填 描述
apFilePath String 文件路徑。

示例代碼

file.getSavedFileList({
}, result => {
  result && !result.error && file.removeSavedFile({
    apFilePath: result.fileList[0].apFilePath,
  }, result => {console.log(result)});
});

success 回調函數

屬性 類型 描述
apFilePath String 被刪除文件的路徑。

2、File JSAPI使用教程

2.1、 file對象獲取

在使用File JSAPI前,需要先獲取$falcon.jsapi的file對象,所有的接口都是通過file對象進行調用的。

const storage = $falcon.jsapi.file;

2.2、 文件存儲

文件存儲操作需要通過步驟1獲取的file對象來進行,具體可通過file.saveFile來實現鍵值對參數的存儲,可存儲的文件類型有txt、png、jpg、zip等常見類型。

文件類型/文件操作 寫入操作
txt 支持
png 支持
jpg 支持
zip 支持
... 支持

在進行文件存儲時,有兩種方式,一種是同步存儲,另一種是異步存儲。同步存儲直接返回存儲結果,異步存儲需要在async函數中操作,通過await返回存儲結果。

接口名/參數列表 入參1 入參2
saveFile apFilePath : 'xxx' (result) => {
console.log(result);

}

同步存儲方式:

const file = $falcon.jsapi.file;
file.saveFile(
  {
    apFilePath: "d:\\demo.jpg",
  },
  (result) => {
    console.log(result);
  }
);

異步存儲方式:

const file = $falcon.jsapi.file;
let result = await storage.setStorage({
  key: 'key',               // key
  data: 'storage content',  // value
});
console.log(result);

2.3、 其他文件操作

其他文件操作也需要通過步驟1獲取的file對象來進行,包含getSavedFileInfo、getFileInfo、getSavedFileList和removeSavedFile,也支持同步和異步兩種操作。

3、 File JSAPI調用示例

本節將以保存一張圖片為示例,介紹如何去調用File JSAPI,具體包含保存文件、獲取保存的文件信息、獲取文件信息、獲取保存的文件列表和刪除文件。調用saveFile(),就可將文件存儲到當前小程序的私有文件路徑下,以供小程序使用。文件使用完畢後,調用removeSavedFile(),就可將之刪除。

3.1、 保存文件

從給定apFilePath中獲取要保存的文件路徑,並調用saveFile()將之保存到小程序的私有文件路徑下:

  const file = $falcon.jsapi.file;
  file.saveFile(
    {
      apFilePath: "d:\\demo.jpg",
    },
    (result) => {
      console.log(result);
    }
  );
}

5b56beec2352e4b2f392f792f2225669.gif

3.2、 獲取保存的文件信息

要獲取某個已保存的文件的信息,可通過調用getSavedFileInfo()實現:

getSavedFileInfo() {
  const file = $falcon.jsapi.file;
  file.saveFile(
    {
      apFilePath: "d:\\demo.jpg",
    },
    (result) => {
      result &&
        !result.error &&
        file.getSavedFileInfo(
          {
            apFilePath: result["apFilePath"],
          },
          (result) => {
            console.log(result);
          }
        );
    }
  );
}

2.gif

3.3、 獲取文件信息

要獲取某個文件的信息,可通過調用getFileInfo()實現:

  const file = $falcon.jsapi.file;
  file.getFileInfo(
    {
      apFilePath: "d:\\demo.jpg",
    },
    (result) => {
      console.log(result);
    }
  );
}

3.gif

3.4、 獲取保存的文件列表

要獲取已保存的文件的列表,可通過調用getSavedFileList()實現:

  const file = $falcon.jsapi.file;
  file.getSavedFileList({}, (result) => {
    result && !result.error && console.log(result);
  });
}

4.gif

3.5、 刪除文件

刪除通過saveFile()保存的文件,可以調用removeSavedFile()實現:

  const file = $falcon.jsapi.file;
  file.getSavedFileList({}, (result) => {
    result &&
      !result.error &&
      file.removeSavedFile(
        {
          apFilePath: result.fileList[0].apFilePath,
        },
        (result) => {
          console.log(result);
        }
      );
  });
}

5.gif

4、開發者技術支持

如需更多技術支持,可加入釘釘開發者群,或者關注微信公眾號

image.png

更多技術與解決方案介紹,請訪問阿里雲AIoT首頁https://iot.aliyun.com/

Leave a Reply

Your email address will not be published. Required fields are marked *