IO模块管理本地文件系统,用于对文件系统的目录浏览、文件的读取、文件的写入等操作。通过plus.io可获取文件系统管理对象

为了安全管理应用的资源目录,规范对文件系统的操作,5+ API在系统应用目录的基础设计了应用沙盒目录, 分为私有目录和公共目录两种类型,私有目录仅应用自身可以访问,公共目录在多应用环境时(如小程序SDK)所有应用都可访问。


调用5+ API时通常需要传入文件路径,为了方便理解,分为以下类型:

  • 相对路径URL,对应类型plus.io.RelativeURL,以“_”开头,用于访问5+ API定义的应用沙盒目录
  • 本地绝对路径URL,对应类型plus.io.LocalURL,以“file://”开头,后面跟随系统的绝对路径,用于访问应用沙盒外的目录,如系统相册等
  • 网络路径URL,对应类型plus.io.RemoteURL,以“http://”或“https://”开头,用于访问网络资源

常量:

方法:

对象:

  • DirectoryEntry: 文件系统中的目录对象,用于管理特定的本地目录
  • DirectoryReader: 读取目录信息对象,用于获取目录中包含的文件及子目录
  • File: 文件系统中的文件数据对象,用于获取文件的数据
  • FileEntry: 文件系统中的文件对象,用于管理特定的本地文件
  • FileReader: 文件系统中的读取文件对象,用于获取文件的内容
  • FileWriter: 文件系统中的写文件对象,用于写入文件内容
  • FileSystem: 文件系统对象,用于管理特定本地文件目录
  • Flags: JSON对象,获取文件操作的参数
  • Metadata: JSON对象,保存文件或目录的状态信息对象
  • FileEvent: 文件或目录操作事件对象
  • RelativeURL: 相对路径URL
  • LocalURL: 本地绝对路径URL
  • RemoteURL: 网络路径URL
  • AudioInfo: JSON对象,音频文件信息对象
  • FileInfo: JSON对象,文件信息对象
  • ImageInfo: JSON对象,图片信息对象
  • VideoInfo: JSON对象,视频文件信息对象

回调方法:

权限:

5+功能模块(permissions)

<span style="background-color:#333333"><span style="color:#474747"><code>
<span style="color:#ffffff">{</span>
<span style="color:#87ceeb">// ...</span>
<span style="color:#ffa0a0">"permissions"</span><span style="color:#ffffff">:{</span>
	<span style="color:#87ceeb">// ...</span>
	<span style="color:#ffa0a0">"File"</span><span style="color:#ffffff">:</span> <span style="color:#ffffff">{</span>
		<span style="color:#ffa0a0">"description"</span><span style="color:#ffffff">:</span> <span style="color:#ffa0a0">"文件系统"</span>
	<span style="color:#ffffff">}</span>
<span style="color:#ffffff">}</span>
<span style="color:#ffffff">}</span>
			</code></span></span>

PRIVATE_WWW

应用私有资源目录常量

<span style="background-color:#333333"><span style="color:#474747"><code><span style="color:#ffffff">
plus</span><span style="color:#ffffff">.</span><span style="color:#ffffff">io</span><span style="color:#ffffff">.</span><span style="color:#ffffff">PRIVATE_WWW</span><span style="color:#ffffff">;</span>
				</code></span></span>

说明:

Number 类型

本地文件系统常量,Number类型,固定值1,对应相对路径URL为"_www"开头的地址。 应用所有资源保存到此目录,仅本应用可访问。 为了确保应用资源的安全性,通常此目录只可读。
注意: 需要将应用设置为释放资源模式才能访问此目录,配置方法:

  • uni-app项目,在manifest.json的"app-plus"节点下添加"runmode":"liberate"
  • 5+ App项目,在manifest.json的"plus"节点下添加"runmode":"liberate"

提交云端打包生效,详见manifest.json的runmode配置

平台支持

  • Android - ALL (支持) :

    应用资源默认在apk的assets目录中,安装到设备后无法通过5+ API操作。 为了能够正常枚举访问此目录,需要将应用设置为释放资源模式(在manifest.json中将runmode值设置为liberate), 这样程序在第一次运行时将资源释放到应用Android系统应用内部存储目录(通常为“/storage/emulated/0/Android/data/%PACKAGENAME%/”,其中%PACKAGENAME%是程序的包名)下的 “apps%APPID%/www”,其中%APPID%是应用的标识。

  • iOS - ALL (支持) :

    应用资源默认在应用沙盒目录下的“/DCloud_Pandora.app/Pandora/apps/%APPID%/www”中, 如将应用设置为释放资源模式(在manifest.json中将runmode值设置为liberate),程序在第一次运行时将资源释放到iOS系统应用沙盒目录下的“/Library/Pandora/apps/%APPID%/www”, 其中%APPID%是应用的标识。

示例:

<span style="background-color:#333333"><span style="color:#474747"><code>
<span style="color:#cccccc"><!DOCTYPE html></span>
<span style="color:#f0e68c"><strong><html></strong></span>
	<span style="color:#f0e68c"><strong><head></strong></span>
	<span style="color:#f0e68c"><strong><meta</strong></span> <span style="color:#bdb76b"><strong>charset</strong></span><span style="color:#ffffff">=</span><span style="color:#ffa0a0">"utf-8"</span><span style="color:#f0e68c"><strong>></strong></span>
	<span style="color:#f0e68c"><strong><title></strong></span><span style="color:#ffffff">File Example</span><span style="color:#f0e68c"><strong></title></strong></span>
	<span style="color:#f0e68c"><strong><script</strong></span> <span style="color:#bdb76b"><strong>type</strong></span><span style="color:#ffffff">=</span><span style="color:#ffa0a0">"text/javascript"</span><span style="color:#f0e68c"><strong>></strong></span>
<span style="color:#87ceeb">// 扩展API加载完毕后调用onPlusReady回调函数 </span><span style="color:#ffffff">
document</span><span style="color:#ffffff">.</span><span style="color:#ffffff">addEventListener</span><span style="color:#ffffff">(</span> <span style="color:#ffa0a0">"plusready"</span><span style="color:#ffffff">,</span><span style="color:#ffffff"> onPlusReady</span><span style="color:#ffffff">,</span> <span style="color:#f0e68c"><strong>false</strong></span> <span style="color:#ffffff">);</span>
<span style="color:#87ceeb">// 扩展API加载完毕,现在可以正常调用扩展API</span>
<span style="color:#f0e68c"><strong>function</strong></span><span style="color:#ffffff"> onPlusReady</span><span style="color:#ffffff">()</span> <span style="color:#ffffff">{</span><span style="color:#ffffff">
	plus</span><span style="color:#ffffff">.</span><span style="color:#ffffff">io</span><span style="color:#ffffff">.</span><span style="color:#ffffff">requestFileSystem</span><span style="color:#ffffff">(</span><span style="color:#ffffff"> plus</span><span style="color:#ffffff">.</span><span style="color:#ffffff">io</span><span style="color:#ffffff">.</span><span style="color:#ffffff">PRIVATE_WWW</span><span style="color:#ffffff">,</span> <span style="color:#f0e68c"><strong>function</strong></span><span style="color:#ffffff">(</span><span style="color:#ffffff"> fs </span><span style="color:#ffffff">)</span> <span style="color:#ffffff">{</span>
		<span style="color:#87ceeb">// 可通过fs操作PRIVATE_WWW文件系统 </span>
		<span style="color:#87ceeb">// ......</span>
	<span style="color:#ffffff">},</span> <span style="color:#f0e68c"><strong>function</strong></span> <span style="color:#ffffff">(</span><span style="color:#ffffff"> e </span><span style="color:#ffffff">)</span> <span style="color:#ffffff">{</span><span style="color:#ffffff">
		alert</span><span style="color:#ffffff">(</span> <span style="color:#ffa0a0">"Request file system failed: "</span> <span style="color:#ffffff">+</span><span style="color:#ffffff"> e</span><span style="color:#ffffff">.</span><span style="color:#ffffff">message </span><span style="color:#ffffff">);</span>
	<span style="color:#ffffff">}</span> <span style="color:#ffffff">);</span>
<span style="color:#ffffff">}</span>
	<span style="color:#f0e68c"><strong></script></strong></span>
	<span style="color:#f0e68c"><strong></head></strong></span>
	<span style="color:#f0e68c"><strong><body></strong></span><span style="color:#ffffff">
		Local file system
	</span><span style="color:#f0e68c"><strong></body></strong></span>
<span style="color:#f0e68c"><strong></html></strong></span>
				</code></span></span>

uni-app使用plus注意事项

PRIVATE_DOC

应用私有文档目录常量

<span style="background-color:#333333"><span style="color:#474747"><code><span style="color:#ffffff">
plus</span><span style="color:#ffffff">.</span><span style="color:#ffffff">io</span><span style="color:#ffffff">.</span><span style="color:#ffffff">PRIVATE_DOC</span><span style="color:#ffffff">;</span>
				</code></span></span>

说明:

Number 类型

本地文件系统常量,Number类型,固定值2,对应相对路径URL为"_doc"开头的地址。 应用私有文档目录,仅本应用可读写。

平台支持

  • Android - ALL (支持) :

    对应Android系统应用内部存储目录(通常为“/storage/emulated/0/Android/data/%PACKAGENAME%/”,其中%PACKAGENAME%是程序的包名)下的 “apps%APPID%/doc”,其中%APPID%是应用的标识。

  • iOS - ALL (支持) :

    对应iOS系统应用沙盒目录下的“/Library/Pandora/apps/%APPID%/doc”,其中%APPID%是应用的标识。

示例:

<span style="background-color:#333333"><span style="color:#474747"><code>
<span style="color:#cccccc"><!DOCTYPE html></span>
<span style="color:#f0e68c"><strong><html></strong></span>
	<span style="color:#f0e68c"><strong><head></strong></span>
	<span style="color:#f0e68c"><strong><meta</strong></span> <span style="color:#bdb76b"><strong>charset</strong></span><span style="color:#ffffff">=</span><span style="color:#ffa0a0">"utf-8"</span><span style="color:#f0e68c"><strong>></strong></span>
	<span style="color:#f0e68c"><strong><title></strong></span><span style="color:#ffffff">File Example</span><span style="color:#f0e68c"><strong></title></strong></span>
	<span style="color:#f0e68c"><strong><script</strong></span> <span style="color:#bdb76b"><strong>type</strong></span><span style="color:#ffffff">=</span><span style="color:#ffa0a0">"text/javascript"</span><span style="color:#f0e68c"><strong>></strong></span>
<span style="color:#87ceeb">// 扩展API加载完毕后调用onPlusReady回调函数 </span><span style="color:#ffffff">
document</span><span style="color:#ffffff">.</span><span style="color:#ffffff">addEventListener</span><span style="color:#ffffff">(</span> <span style="color:#ffa0a0">"plusready"</span><span style="color:#ffffff">,</span><span style="color:#ffffff"> onPlusReady</span><span style="color:#ffffff">,</span> <span style="color:#f0e68c"><strong>false</strong></span> <span style="color:#ffffff">);</span>
<span style="color:#87ceeb">// 扩展API加载完毕,现在可以正常调用扩展API</span>
<span style="color:#f0e68c"><strong>function</strong></span><span style="color:#ffffff"> onPlusReady</span><span style="color:#ffffff">()</span> <span style="color:#ffffff">{</span><span style="color:#ffffff">
	plus</span><span style="color:#ffffff">.</span><span style="color:#ffffff">io</span><span style="color:#ffffff">.</span><span style="color:#ffffff">requestFileSystem</span><span style="color:#ffffff">(</span><span style="color:#ffffff"> plus</span><span style="color:#ffffff">.</span><span style="color:#ffffff">io</span><span style="color:#ffffff">.</span><span style="color:#ffffff">PRIVATE_DOC</span><span style="color:#ffffff">,</span> <span style="color:#f0e68c"><strong>function</strong></span><span style="color:#ffffff">(</span><span style="color:#ffffff"> fs </span><span style="color:#ffffff">)</span> <span style="color:#ffffff">{</span>
		<span style="color:#87ceeb">// 可通过fs操作PRIVATE_DOC文件系统 </span>
		<span style="color:#87ceeb">// ......</span>
	<span style="color:#ffffff">},</span> <span style="color:#f0e68c"><strong>function</strong></span> <span style="color:#ffffff">(</span><span style="color:#ffffff"> e </span><span style="color:#ffffff">)</span> <span style="color:#ffffff">{</span><span style="color:#ffffff">
		alert</span><span style="color:#ffffff">(</span> <span style="color:#ffa0a0">"Request file system failed: "</span> <span style="color:#ffffff">+</span><span style="color:#ffffff"> e</span><span style="color:#ffffff">.</span><span style="color:#ffffff">message </span><span style="color:#ffffff">);</span>
	<span style="color:#ffffff">}</span> <span style="color:#ffffff">);</span>
<span style="color:#ffffff">}</span>
	<span style="color:#f0e68c"><strong></script></strong></span>
	<span style="color:#f0e68c"><strong></head></strong></span>
	<span style="color:#f0e68c"><strong><body></strong></span><span style="color:#ffffff">
		Local file system
	</span><span style="color:#f0e68c"><strong></body></strong></span>
<span style="color:#f0e68c"><strong></html></strong></span>
				</code></span></span>

uni-app使用plus注意事项

PUBLIC_DOCUMENTS

应用公共文档目录常量

<span style="background-color:#333333"><span style="color:#474747"><code><span style="color:#ffffff">
plus</span><span style="color:#ffffff">.</span><span style="color:#ffffff">io</span><span style="color:#ffffff">.</span><span style="color:#ffffff">PUBLIC_DOCUMENTS</span><span style="color:#ffffff">;</span>
				</code></span></span>

说明:

Number 类型

本地文件系统常量,Number类型,固定值3,对应相对路径URL为"_documents"开头的地址。 安装包存在多个5+ App或uni-app环境时(如小程序SDK),所有5+ App或uni-app都可进行读写操作。

平台支持

  • Android - ALL (支持) :

    对应Android系统应用外部存储目录(通常为“/sdcard/Android/data/%PACKAGENAME%/”,其中%PACKAGENAME%是程序的包名)下的"documents"目录, 如HBuilder基座对应目录为“/sdcard/Android/data/io.dcloud.HBuilder/documents”。

  • iOS - ALL (支持) :

    对应iOS系统应用沙盒目录下的“/Library/Pandora/documents”。

示例:

<span style="background-color:#333333"><span style="color:#474747"><code>
<span style="color:#cccccc"><!DOCTYPE html></span>
<span style="color:#f0e68c"><strong><html></strong></span>
	<span style="color:#f0e68c"><strong><head></strong></span>
	<span style="color:#f0e68c"><strong><meta</strong></span> <span style="color:#bdb76b"><strong>charset</strong></span><span style="color:#ffffff">=</span><span style="color:#ffa0a0">"utf-8"</span><span style="color:#f0e68c"><strong>></strong></span>
	<span style="color:#f0e68c"><strong><title></strong></span><span style="color:#ffffff">File Example</span><span style="color:#f0e68c"><strong></title></strong></span>
	<span style="color:#f0e68c"><strong><script</strong></span> <span style="color:#bdb76b"><strong>type</strong></span><span style="color:#ffffff">=</span><span style="color:#ffa0a0">"text/javascript"</span><span style="color:#f0e68c"><strong>></strong></span>
<span style="color:#87ceeb">// 扩展API加载完毕后调用onPlusReady回调函数 </span><span style="color:#ffffff">
document</span><span style="color:#ffffff">.</span><span style="color:#ffffff">addEventListener</span><span style="color:#ffffff">(</span> <span style="color:#ffa0a0">"plusready"</span><span style="color:#ffffff">,</span><span style="color:#ffffff"> onPlusReady</span><span style="color:#ffffff">,</span> <span style="color:#f0e68c"><strong>false</strong></span> <span style="color:#ffffff">);</span>
<span style="color:#87ceeb">// 扩展API加载完毕,现在可以正常调用扩展API</span>
<span style="color:#f0e68c"><strong>function</strong></span><span style="color:#ffffff"> onPlusReady</span><span style="color:#ffffff">()</span> <span style="color:#ffffff">{</span><span style="color:#ffffff">
	plus</span><span style="color:#ffffff">.</span><span style="color:#ffffff">io</span><span style="color:#ffffff">.</span><span style="color:#ffffff">requestFileSystem</span><span style="color:#ffffff">(</span><span style="color:#ffffff"> plus</span><span style="color:#ffffff">.</span><span style="color:#ffffff">io</span><span style="color:#ffffff">.</span><span style="color:#ffffff">PUBLIC_DOCUMENTS</span><span style="color:#ffffff">,</span> <span style="color:#f0e68c"><strong>function</strong></span><span style="color:#ffffff">(</span><span style="color:#ffffff"> fs </span><span style="color:#ffffff">)</span> <span style="color:#ffffff">{</span>
		<span style="color:#87ceeb">// 可通过fs操作PUBLIC_DOCUMENTS文件系统 </span>
		<span style="color:#87ceeb">// ......</span>
	<span style="color:#ffffff">},</span> <span style="color:#f0e68c"><strong>function</strong></span> <span style="color:#ffffff">(</span><span style="color:#ffffff"> e </span><span style="color:#ffffff">)</span> <span style="color:#ffffff">{</span><span style="color:#ffffff">
		alert</span><span style="color:#ffffff">(</span> <span style="color:#ffa0a0">"Request file system failed: "</span> <span style="color:#ffffff">+</span><span style="color:#ffffff"> e</span><span style="color:#ffffff">.</span><span style="color:#ffffff">message </span><span style="color:#ffffff">);</span>
	<span style="color:#ffffff">}</span> <span style="color:#ffffff">);</span>
<span style="color:#ffffff">}</span>
	<span style="color:#f0e68c"><strong></script></strong></span>
	<span style="color:#f0e68c"><strong></head></strong></span>
	<span style="color:#f0e68c"><strong><body></strong></span><span style="color:#ffffff">
		Local file system
	</span><span style="color:#f0e68c"><strong></body></strong></span>
<span style="color:#f0e68c"><strong></html></strong></span>
				</code></span></span>

uni-app使用plus注意事项

PUBLIC_DOWNLOADS

应用公共下载目录常量

<span style="background-color:#333333"><span style="color:#474747"><code><span style="color:#ffffff">
plus</span><span style="color:#ffffff">.</span><span style="color:#ffffff">io</span><span style="color:#ffffff">.</span><span style="color:#ffffff">PUBLIC_DOWNLOADS</span><span style="color:#ffffff">;</span>
				</code></span></span>

说明:

Number 类型

本地文件系统常量,Number类型,固定值4,对应相对路径URL为"_downloads"开头的地址。 安装包存在多个5+ App或uni-app环境时(如小程序SDK),所有5+ App或uni-app都可进行读写操作。

平台支持

  • Android - ALL (支持) :

    对应Android系统应用外部存储目录(通常为“/sdcard/Android/data/%PACKAGENAME%/”,其中%PACKAGENAME%是程序的包名)下的"downloads"目录, 如HBuilder基座对应目录为“/sdcard/Android/data/io.dcloud.HBuilder/downloads”。

  • iOS - ALL (支持) :

    对应iOS系统应用沙盒目录下的“/Library/Pandora/downloads”。

示例:

<span style="background-color:#333333"><span style="color:#474747"><code>
<span style="color:#cccccc"><!DOCTYPE html></span>
<span style="color:#f0e68c"><strong><html></strong></span>
	<span style="color:#f0e68c"><strong><head></strong></span>
	<span style="color:#f0e68c"><strong><meta</strong></span> <span style="color:#bdb76b"><strong>charset</strong></span><span style="color:#ffffff">=</span><span style="color:#ffa0a0">"utf-8"</span><span style="color:#f0e68c"><strong>></strong></span>
	<span style="color:#f0e68c"><strong><title></strong></span><span style="color:#ffffff">File Example</span><span style="color:#f0e68c"><strong></title></strong></span>
	<span style="color:#f0e68c"><strong><script</strong></span> <span style="color:#bdb76b"><strong>type</strong></span><span style="color:#ffffff">=</span><span style="color:#ffa0a0">"text/javascript"</span><span style="color:#f0e68c"><strong>></strong></span>
<span style="color:#87ceeb">// 扩展API加载完毕后调用onPlusReady回调函数 </span><span style="color:#ffffff">
document</span><span style="color:#ffffff">.</span><span style="color:#ffffff">addEventListener</span><span style="color:#ffffff">(</span> <span style="color:#ffa0a0">"plusready"</span><span style="color:#ffffff">,</span><span style="color:#ffffff"> onPlusReady</span><span style="color:#ffffff">,</span> <span style="color:#f0e68c"><strong>false</strong></span> <span style="color:#ffffff">);</span>
<span style="color:#87ceeb">// 扩展API加载完毕,现在可以正常调用扩展API</span>
<span style="color:#f0e68c"><strong>function</strong></span><span style="color:#ffffff"> onPlusReady</span><span style="color:#ffffff">()</span> <span style="color:#ffffff">{</span><span style="color:#ffffff">
	plus</span><span style="color:#ffffff">.</span><span style="color:#ffffff">io</span><span style="color:#ffffff">.</span><span style="color:#ffffff">requestFileSystem</span><span style="color:#ffffff">(</span><span style="color:#ffffff"> plus</span><span style="color:#ffffff">.</span><span style="color:#ffffff">io</span><span style="color:#ffffff">.</span><span style="color:#ffffff">PUBLIC_DOWNLOADS</span><span style="color:#ffffff">,</span> <span style="color:#f0e68c"><strong>function</strong></span><span style="color:#ffffff">(</span><span style="color:#ffffff"> fs </span><span style="color:#ffffff">)</span> <span style="color:#ffffff">{</span>
		<span style="color:#87ceeb">// 可通过fs操作PUBLIC_DOWNLOADS文件系统 </span>
		<span style="color:#87ceeb">// ......</span>
	<span style="color:#ffffff">},</span> <span style="color:#f0e68c"><strong>function</strong></span> <span style="color:#ffffff">(</span><span style="color:#ffffff"> e </span><span style="color:#ffffff">)</span> <span style="color:#ffffff">{</span><span style="color:#ffffff">
		alert</span><span style="color:#ffffff">(</span> <span style="color:#ffa0a0">"Request file system failed: "</span> <span style="color:#ffffff">+</span><span style="color:#ffffff"> e</span><span style="color:#ffffff">.</span><span style="color:#ffffff">message </span><span style="color:#ffffff">);</span>
	<span style="color:#ffffff">}</span> <span style="color:#ffffff">);</span>
<span style="color:#ffffff">}</span>
	<span style="color:#f0e68c"><strong></script></strong></span>
	<span style="color:#f0e68c"><strong></head></strong></span>
	<span style="color:#f0e68c"><strong><body></strong></span><span style="color:#ffffff">
		Local file system
	</span><span style="color:#f0e68c"><strong></body></strong></span>
<span style="color:#f0e68c"><strong></html></strong></span>
				</code></span></span>

uni-app使用plus注意事项

requestFileSystem

请求本地文件系统对象

<span style="background-color:#333333"><span style="color:#474747"><code>
<span style="color:#f0e68c"><strong>void</strong></span><span style="color:#ffffff"> plus</span><span style="color:#ffffff">.</span><span style="color:#ffffff">io</span><span style="color:#ffffff">.</span><span style="color:#ffffff">requestFileSystem</span><span style="color:#ffffff">(</span><span style="color:#ffffff"> type</span><span style="color:#ffffff">,</span><span style="color:#ffffff"> succesCB</span><span style="color:#ffffff">,</span><span style="color:#ffffff"> errorCB </span><span style="color:#ffffff">);</span>
				</code></span></span>

说明:

获取指定的文件系统,可通过type指定获取文件系统的类型。 获取指定的文件系统对象成功通过succesCB回调返回,失败则通过errorCB返回。

参数:

  • type: ( Number ) 必选 本地文件系统常量

    可取plus.io下的常量,如plus.io.PRIVATE_DOC、plus.io.PUBLIC_DOCUMENTS等。

  • succesCB: FileSystemSuccessCallback ) 必选 请求文件系统成功的回调

  • errorCB: FileErrorCallback ) 可选 请求文件系统失败的回调

返回值:

void : 无

示例:

<span style="background-color:#333333"><span style="color:#474747"><code>
<span style="color:#cccccc"><!DOCTYPE html></span>
<span style="color:#f0e68c"><strong><html></strong></span>
	<span style="color:#f0e68c"><strong><head></strong></span>
	<span style="color:#f0e68c"><strong><meta</strong></span> <span style="color:#bdb76b"><strong>charset</strong></span><span style="color:#ffffff">=</span><span style="color:#ffa0a0">"utf-8"</span><span style="color:#f0e68c"><strong>></strong></span>
	<span style="color:#f0e68c"><strong><title></strong></span><span style="color:#ffffff">File Example</span><span style="color:#f0e68c"><strong></title></strong></span>
	<span style="color:#f0e68c"><strong><script</strong></span> <span style="color:#bdb76b"><strong>type</strong></span><span style="color:#ffffff">=</span><span style="color:#ffa0a0">"text/javascript"</span><span style="color:#f0e68c"><strong>></strong></span>
<span style="color:#87ceeb">// 扩展API加载完毕后调用onPlusReady回调函数 </span><span style="color:#ffffff">
document</span><span style="color:#ffffff">.</span><span style="color:#ffffff">addEventListener</span><span style="color:#ffffff">(</span> <span style="color:#ffa0a0">"plusready"</span><span style="color:#ffffff">,</span><span style="color:#ffffff"> onPlusReady</span><span style="color:#ffffff">,</span> <span style="color:#f0e68c"><strong>false</strong></span> <span style="color:#ffffff">);</span>
<span style="color:#87ceeb">// 扩展API加载完毕,现在可以正常调用扩展API</span>
<span style="color:#f0e68c"><strong>function</strong></span><span style="color:#ffffff"> onPlusReady</span><span style="color:#ffffff">()</span> <span style="color:#ffffff">{</span><span style="color:#ffffff">
	plus</span><span style="color:#ffffff">.</span><span style="color:#ffffff">io</span><span style="color:#ffffff">.</span><span style="color:#ffffff">requestFileSystem</span><span style="color:#ffffff">(</span><span style="color:#ffffff"> plus</span><span style="color:#ffffff">.</span><span style="color:#ffffff">io</span><span style="color:#ffffff">.</span><span style="color:#ffffff">PRIVATE_WWW</span><span style="color:#ffffff">,</span> <span style="color:#f0e68c"><strong>function</strong></span><span style="color:#ffffff">(</span><span style="color:#ffffff"> fs </span><span style="color:#ffffff">)</span> <span style="color:#ffffff">{</span>
		<span style="color:#87ceeb">// 可通过fs进行文件操作 </span><span style="color:#ffffff">
		alert</span><span style="color:#ffffff">(</span> <span style="color:#ffa0a0">"Request file system success!"</span> <span style="color:#ffffff">);</span>
	<span style="color:#ffffff">},</span> <span style="color:#f0e68c"><strong>function</strong></span> <span style="color:#ffffff">(</span><span style="color:#ffffff"> e </span><span style="color:#ffffff">)</span> <span style="color:#ffffff">{</span><span style="color:#ffffff">
		alert</span><span style="color:#ffffff">(</span> <span style="color:#ffa0a0">"Request file system failed: "</span> <span style="color:#ffffff">+</span><span style="color:#ffffff"> e</span><span style="color:#ffffff">.</span><span style="color:#ffffff">message </span><span style="color:#ffffff">);</span>
	<span style="color:#ffffff">}</span> <span style="color:#ffffff">);</span>
<span style="color:#ffffff">}</span>
	<span style="color:#f0e68c"><strong></script></strong></span>
	<span style="color:#f0e68c"><strong></head></strong></span>
	<span style="color:#f0e68c"><strong><body></strong></span><span style="color:#ffffff">
		Request file system
	</span><span style="color:#f0e68c"><strong></body></strong></span>
<span style="color:#f0e68c"><strong></html></strong></span>
				</code></span></span>

uni-app使用plus注意事项

resolveLocalFileSystemURL

通过URL参数获取目录对象或文件对象

<span style="background-color:#333333"><span style="color:#474747"><code>
<span style="color:#f0e68c"><strong>void</strong></span><span style="color:#ffffff"> plus</span><span style="color:#ffffff">.</span><span style="color:#ffffff">io</span><span style="color:#ffffff">.</span><span style="color:#ffffff">resolveLocalFileSystemURL</span><span style="color:#ffffff">(</span><span style="color:#ffffff"> url</span><span style="color:#ffffff">,</span><span style="color:#ffffff"> succesCB</span><span style="color:#ffffff">,</span><span style="color:#ffffff"> errorCB </span><span style="color:#ffffff">);</span>
				</code></span></span>

说明:

快速获取指定的目录或文件操作对象,如通过URL值“_www/test.html”可直接获取文件操作对象。 url值可支持相对路径URL、本地路径URL。 获取指定的文件或目录操作对象成功通过succesCB回调返回,如果指定URL路径或文件不存在则失败通过errorCB回调返回。

参数:

  • url : ( String ) 必选 要操作文件或目录的URL地址

  • succesCB: FileResolveSuccessCallback ) 必选 获取操作文件或目录对象成功的回调函数

  • errorCB: FileErrorCallback ) 可选 获取操作文件或目录对象失败的回调函数

返回值:

void : 无

示例:

<span style="background-color:#333333"><span style="color:#474747"><code>
<span style="color:#cccccc"><!DOCTYPE html></span>
<span style="color:#f0e68c"><strong><html></strong></span>
	<span style="color:#f0e68c"><strong><head></strong></span>
	<span style="color:#f0e68c"><strong><meta</strong></span> <span style="color:#bdb76b"><strong>charset</strong></span><span style="color:#ffffff">=</span><span style="color:#ffa0a0">"utf-8"</span><span style="color:#f0e68c"><strong>></strong></span>
	<span style="color:#f0e68c"><strong><title></strong></span><span style="color:#ffffff">File Example</span><span style="color:#f0e68c"><strong></title></strong></span>
	<span style="color:#f0e68c"><strong><script</strong></span> <span style="color:#bdb76b"><strong>type</strong></span><span style="color:#ffffff">=</span><span style="color:#ffa0a0">"text/javascript"</span><span style="color:#f0e68c"><strong>></strong></span>
<span style="color:#87ceeb">// 扩展API加载完毕后调用onPlusReady回调函数 </span><span style="color:#ffffff">
document</span><span style="color:#ffffff">.</span><span style="color:#ffffff">addEventListener</span><span style="color:#ffffff">(</span> <span style="color:#ffa0a0">"plusready"</span><span style="color:#ffffff">,</span><span style="color:#ffffff"> onPlusReady</span><span style="color:#ffffff">,</span> <span style="color:#f0e68c"><strong>false</strong></span> <span style="color:#ffffff">);</span>
<span style="color:#87ceeb">// 扩展API加载完毕,现在可以正常调用扩展API</span>
<span style="color:#f0e68c"><strong>function</strong></span><span style="color:#ffffff"> onPlusReady</span><span style="color:#ffffff">()</span> <span style="color:#ffffff">{</span><span style="color:#ffffff">
	plus</span><span style="color:#ffffff">.</span><span style="color:#ffffff">io</span><span style="color:#ffffff">.</span><span style="color:#ffffff">resolveLocalFileSystemURL</span><span style="color:#ffffff">(</span> <span style="color:#ffa0a0">"_www/test.html"</span><span style="color:#ffffff">,</span> <span style="color:#f0e68c"><strong>function</strong></span><span style="color:#ffffff">(</span><span style="color:#ffffff"> entry </span><span style="color:#ffffff">)</span> <span style="color:#ffffff">{</span>
		<span style="color:#87ceeb">// 可通过entry对象操作test.html文件 </span><span style="color:#ffffff">
		entry</span><span style="color:#ffffff">.</span><span style="color:#ffffff">file</span><span style="color:#ffffff">(</span> <span style="color:#f0e68c"><strong>function</strong></span><span style="color:#ffffff">(</span><span style="color:#ffffff">file</span><span style="color:#ffffff">){</span>
			<span style="color:#f0e68c"><strong>var</strong></span><span style="color:#ffffff"> fileReader </span><span style="color:#ffffff">=</span> <span style="color:#f0e68c"><strong>new</strong></span><span style="color:#ffffff"> plus</span><span style="color:#ffffff">.</span><span style="color:#ffffff">io</span><span style="color:#ffffff">.</span><span style="color:#98fb98">FileReader</span><span style="color:#ffffff">();</span><span style="color:#ffffff">
			alert</span><span style="color:#ffffff">(</span><span style="color:#ffa0a0">"getFile:"</span> <span style="color:#ffffff">+</span><span style="color:#ffffff"> JSON</span><span style="color:#ffffff">.</span><span style="color:#ffffff">stringify</span><span style="color:#ffffff">(</span><span style="color:#ffffff">file</span><span style="color:#ffffff">));</span><span style="color:#ffffff">
			fileReader</span><span style="color:#ffffff">.</span><span style="color:#ffffff">readAsText</span><span style="color:#ffffff">(</span><span style="color:#ffffff">file</span><span style="color:#ffffff">,</span> <span style="color:#ffa0a0">'utf-8'</span><span style="color:#ffffff">);</span><span style="color:#ffffff">
			fileReader</span><span style="color:#ffffff">.</span><span style="color:#ffffff">onloadend </span><span style="color:#ffffff">=</span> <span style="color:#f0e68c"><strong>function</strong></span><span style="color:#ffffff">(</span><span style="color:#ffffff">evt</span><span style="color:#ffffff">)</span> <span style="color:#ffffff">{</span><span style="color:#ffffff">
				alert</span><span style="color:#ffffff">(</span><span style="color:#ffa0a0">"11"</span> <span style="color:#ffffff">+</span><span style="color:#ffffff"> evt</span><span style="color:#ffffff">);</span><span style="color:#ffffff">
				alert</span><span style="color:#ffffff">(</span><span style="color:#ffa0a0">"evt.target"</span> <span style="color:#ffffff">+</span><span style="color:#ffffff"> evt</span><span style="color:#ffffff">.</span><span style="color:#ffffff">target</span><span style="color:#ffffff">);</span><span style="color:#ffffff">
				alert</span><span style="color:#ffffff">(</span><span style="color:#ffffff">evt</span><span style="color:#ffffff">.</span><span style="color:#ffffff">target</span><span style="color:#ffffff">.</span><span style="color:#ffffff">result</span><span style="color:#ffffff">);</span>
			<span style="color:#ffffff">}</span><span style="color:#ffffff">
			alert</span><span style="color:#ffffff">(</span><span style="color:#ffffff">file</span><span style="color:#ffffff">.</span><span style="color:#ffffff">size </span><span style="color:#ffffff">+</span> <span style="color:#ffa0a0">'--'</span> <span style="color:#ffffff">+</span><span style="color:#ffffff"> file</span><span style="color:#ffffff">.</span><span style="color:#ffffff">name</span><span style="color:#ffffff">);</span>
		<span style="color:#ffffff">}</span> <span style="color:#ffffff">);</span>
	<span style="color:#ffffff">},</span> <span style="color:#f0e68c"><strong>function</strong></span> <span style="color:#ffffff">(</span><span style="color:#ffffff"> e </span><span style="color:#ffffff">)</span> <span style="color:#ffffff">{</span><span style="color:#ffffff">
		alert</span><span style="color:#ffffff">(</span> <span style="color:#ffa0a0">"Resolve file URL failed: "</span> <span style="color:#ffffff">+</span><span style="color:#ffffff"> e</span><span style="color:#ffffff">.</span><span style="color:#ffffff">message </span><span style="color:#ffffff">);</span>
	<span style="color:#ffffff">}</span> <span style="color:#ffffff">);</span>
<span style="color:#ffffff">}</span>
	<span style="color:#f0e68c"><strong></script></strong></span>
	<span style="color:#f0e68c"><strong></head></strong></span>
	<span style="color:#f0e68c"><strong><body></strong></span><span style="color:#ffffff">
		Request file system
	</span><span style="color:#f0e68c"><strong></body></strong></span>
<span style="color:#f0e68c"><strong></html></strong></span>
				</code></span></span>

uni-app使用plus注意事项

convertLocalFileSystemURL

将本地URL路径转换成平台绝对路径

<span style="background-color:#333333"><span style="color:#474747"><code>
<span style="color:#98fb98">String</span><span style="color:#ffffff"> plus</span><span style="color:#ffffff">.</span><span style="color:#ffffff">io</span><span style="color:#ffffff">.</span><span style="color:#ffffff">convertLocalFileSystemURL</span><span style="color:#ffffff">(</span><span style="color:#ffffff"> url </span><span style="color:#ffffff">);</span>
				</code></span></span>

说明:

绝对路径符合各平台文件路径格式,通常用于Native.JS调用系统原生文件操作API,也可以在前面添加“file://”后在html页面中直接使用。

参数:

  • url: ( String ) 必选 要转换的文件或目录URL地址

    URL地址必须是合法的路径,如果地址不合法则返回null。

返回值:

String : 转换后在平台路径,在不同平台或者不同设备返回的值可能存在差异,如输入url为“_doc/a.png”: Android平台转换后的路径为“/storage/sdcard0/Android/data/io.dcloud.HBuilder/.HBuilder/apps/HBuilder/doc/a.png”; 在iOS平台转换后的路径为“/var/mobile/Containers/Data/Application/757966CF-345C-4348-B07F-EEF83CF9A369/Library/Pandora/apps/HBuilder/doc/a.png”。

示例:

<span style="background-color:#333333"><span style="color:#474747"><code>
<span style="color:#cccccc"><!DOCTYPE html></span>
<span style="color:#f0e68c"><strong><html></strong></span>
	<span style="color:#f0e68c"><strong><head></strong></span>
	<span style="color:#f0e68c"><strong><meta</strong></span> <span style="color:#bdb76b"><strong>charset</strong></span><span style="color:#ffffff">=</span><span style="color:#ffa0a0">"utf-8"</span><span style="color:#f0e68c"><strong>></strong></span>
	<span style="color:#f0e68c"><strong><title></strong></span><span style="color:#ffffff">File Example</span><span style="color:#f0e68c"><strong></title></strong></span>
	<span style="color:#f0e68c"><strong><script</strong></span> <span style="color:#bdb76b"><strong>type</strong></span><span style="color:#ffffff">=</span><span style="color:#ffa0a0">"text/javascript"</span><span style="color:#f0e68c"><strong>></strong></span>
<span style="color:#87ceeb">// 扩展API加载完毕后调用onPlusReady回调函数 </span><span style="color:#ffffff">
document</span><span style="color:#ffffff">.</span><span style="color:#ffffff">addEventListener</span><span style="color:#ffffff">(</span> <span style="color:#ffa0a0">"plusready"</span><span style="color:#ffffff">,</span><span style="color:#ffffff"> onPlusReady</span><span style="color:#ffffff">,</span> <span style="color:#f0e68c"><strong>false</strong></span> <span style="color:#ffffff">);</span>
<span style="color:#87ceeb">// 扩展API加载完毕,现在可以正常调用扩展API</span>
<span style="color:#f0e68c"><strong>function</strong></span><span style="color:#ffffff"> onPlusReady</span><span style="color:#ffffff">(){</span>
	<span style="color:#f0e68c"><strong>var</strong></span><span style="color:#ffffff"> url</span><span style="color:#ffffff">=</span><span style="color:#ffa0a0">"_www/index.html"</span><span style="color:#ffffff">;</span>
	<span style="color:#f0e68c"><strong>var</strong></span><span style="color:#ffffff"> path</span><span style="color:#ffffff">=</span><span style="color:#ffffff">plus</span><span style="color:#ffffff">.</span><span style="color:#ffffff">io</span><span style="color:#ffffff">.</span><span style="color:#ffffff">convertLocalFileSystemURL</span><span style="color:#ffffff">(</span><span style="color:#ffffff">url</span><span style="color:#ffffff">);</span><span style="color:#ffffff">
	alert</span><span style="color:#ffffff">(</span><span style="color:#ffffff">path</span><span style="color:#ffffff">);</span>
<span style="color:#ffffff">}</span>
	<span style="color:#f0e68c"><strong></script></strong></span>
	<span style="color:#f0e68c"><strong></head></strong></span>
	<span style="color:#f0e68c"><strong><body></strong></span><span style="color:#ffffff">
		convertLocalFileSystemURL
	</span><span style="color:#f0e68c"><strong></body></strong></span>
<span style="color:#f0e68c"><strong></html></strong></span>
				</code></span></span>

uni-app使用plus注意事项

convertAbsoluteFileSystem

将平台绝对路径转换成本地URL路径

<span style="background-color:#333333"><span style="color:#474747"><code>
<span style="color:#98fb98">String</span><span style="color:#ffffff"> plus</span><span style="color:#ffffff">.</span><span style="color:#ffffff">io</span><span style="color:#ffffff">.</span><span style="color:#ffffff">convertAbsoluteFileSystem</span><span style="color:#ffffff">(</span><span style="color:#ffffff"> path </span><span style="color:#ffffff">);</sp
<think>我们参考用户提供的引用和需求,用户想在H5+ App中使用IO模块生成JSON或TXT文件到Android手机本地。根据引用[1]和[2],我们可以使用`plus.io.requestFileSystem`来获取文件系统,然后创建文件写入内容。步骤:1.请求文件系统:使用`plus.io.requestFileSystem`请求一个文件系统,通常使用`plus.io.PUBLIC_DOCUMENTS`(公共文档目录)或`plus.io.PRIVATE_DOCUMENTS`(应用私有文档目录)等。2.创建或获取文件:使用`getFile`方法创建或获取文件。3.创建文件写入器:使用`createWriter`创建文件写入器。4.写入内容:使用`write`方法写入内容,注意如果文件已存在,我们可以选择覆盖或追加。 根据用户需求,我们可能需要生成JSON或TXT文件。我们可以将数据(可能是JavaScript对象)转换为字符串后写入。 示例代码(封装成函数): ```javascript/***将数据写入到指定文件* @param {string}fileName文件名,例如:'data.json'* @param {string|Object}data要写入的数据,如果是对象则转换为JSON字符串*@param{boolean} [append=false]是否追加模式,默认覆盖*@param{Function} [successCallback]成功回调*@param{Function} [errorCallback]失败回调*/function writeFile(fileName,data,append,successCallback, errorCallback){//如果data是对象,则转换为JSON字符串;否则直接使用varcontent =typeof data=== 'object'? JSON.stringify(data) :data;//文件系统常量,这里使用公共文档目录(在Android上通常是用户可见的目录)varfsDir= plus.io.PUBLIC_DOCUMENTS;plus.io.requestFileSystem(fsDir, function(fs) {//请求文件系统成功,fs.root是根目录对象fs.root.getFile(fileName, {create:true },function(fileEntry){//创建文件写入器fileEntry.createWriter(function(writer){writer.onwrite =function(e) {console.log('写入成功');successCallback&& successCallback();};writer.onerror= function(e){console.error('写入失败:' +e.toString());errorCallback&& errorCallback(e);};//如果是追加模式,将指针移动到文件末尾;否则覆盖(默认从0开始)if(append) {writer.seek(writer.length);}else {writer.seek(0);//如果要覆盖,并且希望清空文件,可以使用truncate方法(但注意:seek(0)后写入会覆盖原有内容,但不会自动截断多余内容,所以如果原有内容比新内容长,则多余部分会保留。因此,我们通常先truncate再写)writer.truncate(0); //截断文件为0字节,即清空}writer.write(content);},errorCallback);},errorCallback);}, errorCallback);} ```使用示例:```javascript//写入JSON文件(覆盖) vardata ={ name: "张三",age:30}; writeFile('data.json', data, false, function() {console.log('写入完成'); },function(e) {console.error('出错:',e.message); });//写入文本文件(追加)writeFile('log.txt','这是一条日志\n',true,function(){console.log('日志追加成功'); });``` 注意事项: 1.在H5+App中,文件操作是异步的,所以使用回调函数处理结果。2.在Android平台上,使用`plus.io.PUBLIC_DOCUMENTS`目录文件会被保存在公共文档目录,路径可以通过`plus.io.convertLocalFileSystemURL`转换为平台路径(如引用[2]所示)。 3.追加模式:如果希望每次写入都追加到文件末尾,设置`append`为`true`;否则覆盖。4.清空文件:在覆盖模式下,我们使用`truncate(0)`来清空文件,然后再写入,这样可以确保覆盖整个文件内容。如果不调用`truncate`,当新内容比旧内容短时,旧内容的后半部分会保留。关于引用[3]中提到的读取本地JSON文件,可以使用类似的方法,但这里用户主要需求是写入。另外,引用[1]中的代码示例是追加写入,并且使用了一个特殊字符'^'来分隔不同的JSON字符串。这种方式适用于需要存储多条记录的情况,但读取时需要按这个分隔符拆分。如果只是存储单个JSON对象,则不需要这样。 如果用户需要存储多个JSON对象(比如日志),可以每次追加一个JSON字符串并加上分隔符,但读取时就需要特殊处理。如果不需要保留历史,则覆盖即可。请根据实际需求选择覆盖或追加模式。相关问题:1.如何在H5+App中读取已存储的JSON或TXT文件? 2. H5+App中还有哪些文件系统常量可用?它们分别对应什么目录?3.如何处理文件操作中的错误? 4.如何确保大文件写入的性能和稳定性?</think>### 在H5+ App中使用IO模块实现本地文件存储 在H5+ App中,您可以使用`plus.io`模块实现JSON/TXT文件的本地存储。以下是完整实现方案: #### 核心步骤 1. **请求文件系统** 使用`plus.io.requestFileSystem`获取设备文件系统访问权限: ```javascript plus.io.requestFileSystem(plus.io.PUBLIC_DOCUMENTS, function(fs) { // 文件系统操作 }, function(e) { console.error("文件系统请求失败: " + e.message); }); ``` 2. **创建/获取文件** 在文件系统中创建或获取目标文件: ```javascript fs.root.getFile('data.json', { create: true }, function(fileEntry) { // 文件操作 }, function(e) { console.error("文件创建失败: " + e.message); }); ``` 3. **写入数据** 创建文件写入器并写入内容: ```javascript fileEntry.createWriter(function(writer) { writer.onwrite = function(e) { console.log("写入成功"); }; writer.onerror = function(e) { console.error("写入失败: " + e.toString()); }; // 将数据转为字符串 const dataStr = JSON.stringify({ name: "张三", age: 25 }); // 写入内容(覆盖模式) writer.seek(0); writer.truncate(0); // 清空文件 writer.write(dataStr); }); ``` #### 完整封装函数 ```javascript function saveLocalFile(fileName, data, isAppend = false) { // 获取文件系统 plus.io.requestFileSystem(plus.io.PUBLIC_DOCUMENTS, function(fs) { // 创建/获取文件 fs.root.getFile(fileName, { create: true }, function(fileEntry) { // 创建写入器 fileEntry.createWriter(function(writer) { writer.onerror = function(e) { console.error(`文件写入失败: ${e.message}`); }; // 处理写入模式 if (isAppend) { writer.seek(writer.length); // 追加到末尾 writer.write('\n' + JSON.stringify(data)); } else { writer.seek(0); writer.truncate(0); // 清空文件 writer.write(JSON.stringify(data)); } console.log(`文件已保存: ${fileName}`); // 获取文件路径(Android) const filePath = plus.io.convertLocalFileSystemURL(fileEntry.toURL()); console.log("文件路径: " + filePath); }); }, function(e) { console.error(`文件创建失败: ${e.message}`); }); }, function(e) { console.error(`文件系统请求失败: ${e.message}`); }); } ``` #### 使用示例 ```javascript // 保存JSON文件(覆盖模式) const userData = { id: 1001, name: "李四", email: "lisi@example.com" }; saveLocalFile("user.json", userData); // 追加日志到TXT文件 const logEntry = { timestamp: Date.now(), event: "用户登录" }; saveLocalFile("app_log.txt", logEntry, true); ``` #### 关键说明 1. **存储位置** - `plus.io.PUBLIC_DOCUMENTS`: Android公共文档目录(用户可见)[^2] - `plus.io.PRIVATE_DOCUMENTS`: 应用私有目录(推荐存储敏感数据) 2. **路径转换** 使用`plus.io.convertLocalFileSystemURL()`获取平台绝对路径: ```javascript const androidPath = plus.io.convertLocalFileSystemURL('_doc/user.json'); // 示例输出: /storage/emulated/0/Android/data/.../doc/user.json [^2] ``` 3. **文件操作模式** - **覆盖模式**:默认方式,清空原内容后写入 - **追加模式**:在文件末尾添加新内容(适合日志) 4. **数据类型处理** - 使用`JSON.stringify()`转换对象为字符串 - 文本文件可直接写入字符串 #### 注意事项 1. **权限声明** 在`manifest.json`中添加Android存储权限: ```json "permissions": { "File": { "description": "文件存储权限" } } ``` 2. **异步处理** 所有文件操作都是异步的,需在回调函数中处理结果 3. **错误处理** 必须实现完整的错误回调,避免应用崩溃[^4] 4. **路径规范** 使用H5+定义的虚拟路径前缀: - `_doc/`: 公共文档目录 - `_documents/`: 私有文档目录 - `_downloads/`: 下载目录
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值