Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » UltraLite - C 及 C++ 编程 » API 参考 » UltraLite C/C++ 公共 API 参考

 

MLFileTransfer 函数

使用 MobiLink 接口从 MobiLink 服务器下载文件。

语法
ul_bool MLFileTransfer ( ml_file_transfer_info * info );                                  
参数

info   包含文件传输信息的结构。

ML 文件传输参数

ML 文件传输参数是作为一个参数传送到 MLFileTransfer 函数的结构的成员。ml_file_transfer_info 结构在头文件 mlfiletransfer.h 中定义。按如下方法指定此结构中的各个字段:

filename   必需。从运行 MobiLink 的服务器传输的文件名。在缺省情况下搜索根目录之前,MobiLink 首先搜索 username 子目录。请参见-ftr 选项

如果找不到文件,则在错误字段中设置错误信息。文件名中不能包括任何驱动器或路径信息,否则 MobiLink 找不到它。

dest_path   用于存储下载文件的本地路径。如果此参数为空(缺省值),则将下载文件存储在当前目录中。

  • 在 Windows Mobile 上,如果 dest_path 为空,则将文件存储在设备的根 (\) 目录中。

  • 在桌面操作系统中,如果 dest_path 为空,则将文件存储在用户的当前目录中。

  • 在 Palm OS 上,当下载到设备外部存储器上时,将 dest_path 加上前缀 vfs:。然后应该按平台文件命名约定指定路径。请参见Palm OS

    如果 dest_path 字段为空,则 MLFileTransfer 假定它正在下载 Palm 记录数据库 (.pdb)。

dest_filename   所下载文件的本地名称。如果此参数为空,则使用文件名中的值。

stream   必需。协议可以是以下各项之一:TCPIP、TLS、HTTP 或 HTTPS。请参见Stream Type 同步参数

stream_parms   给定流的协议选项。请参见UltraLite 同步流的网络协议选项

username   必需。MobiLink 用户名。

password   MobiLink 用户名的口令。

version   必需。MobiLink 脚本版本。

observer   可以提供一个回调以通过 'observer' 字段观察文件下载进度。有关详细信息,请参见后面的回调函数说明。

user_data   使应用程序特定的信息可用于同步观察器。请参见User Data 同步参数

force_download   若设置为 true,则即使时间戳指示文件已经存在也下载文件。若设置为 false,则仅当服务器版本和本地版本不同时下载文件。在这种情况下,文件的服务器版本覆盖客户端版本。在下载文件之前,放弃客户端上名称相同的所有以前文件。MLFileTransfer 通过计算每个文件的加密散列值比较文件的服务器和客户端版本;只有文件内容相同时散列值才相同。

enable_resume   如果设置为 true,MLFileTransfer 恢复以前由于通信错误或用户将其取消而中断的下载。如果服务器上的文件比部分本地文件新,则放弃部分文件并从头下载新版本。force_download 参数替换此参数。

num_auth_parms   传送到 MobiLink 事件中的验证参数的验证参数的数目。请参见Number of Authentication Parameters 参数

auth_parms   向 MobiLink 事件中的验证参数提供参数。请参见Authentication Parameters 同步参数

downloaded_file   设置为以下各项之一:

  • 1,如果成功下载文件。

  • 0,如果出现错误。如果在调用 MLFileTransfer 时文件已为最新,则出现错误。在这种情况下,函数返回 true 而不是 false。对于 Palm OS,下载记录数据库 (.pdb) 文件时,MLFileTransfer 将始终下载此文件,而无论此文件是否为最新。

auth_status   报告 MobiLink 用户验证的状态。MobiLink 服务器将此信息提供给客户端。请参见Authentication Status 同步参数

auth_value   报告自定义 MobiLink 用户验证脚本的结果。MobiLink 服务器将此信息提供给客户端。请参见Authentication Value 同步参数

file_auth_code   包含服务器可选 authenticate_file_transfer 脚本的返回代码。

error   包含有关出现的任何错误的信息。

返回值
  • ul_true   文件下载成功。

  • ul_false   文件下载不成功。可在 ml_file_transfer_info 结构的错误字段中提供错误信息。可恢复未完成的文件传输。

注释

您必须设置要传输的文件的源位置。此位置必须指定为 MobiLink 服务器上的 MobiLink 用户目录(或在此服务器上的缺省目录中)。您也可以设置此文件的预定目标位置和文件名。

例如,您可以通过编程让您的应用程序从 MobiLink 服务器下载新数据库或替换的数据库。您可以为特定用户自定义文件,因为搜索的第一个位置是特定用户的子目录。您也可以维护服务器上根文件夹中的缺省文件,因为如果在用户文件夹中找不到指定文件,则使用此位置。

回调函数

通过观察器参数观察文件传输进度的回调具有以下原型:

typedef void(*ml_file_transfer_observer_fn)( ml_file_transfer_status * status );

传送到回调函数的 ml_file_transfer_status 对象定义如下:

typedef struct ml_file_transfer_status {
    asa_uint64                  file_size;
    asa_uint64                  bytes_received;
    asa_uint64                  resumed_at_size;
    ml_file_transfer_info_a *   info;
    asa_uint16                  flags;
    asa_uint8                   stop;
} ml_file_transfer_status;

file_size   所下载文件的总大小(以字节为单位)。

bytes_received   指示迄今为止已下载多少文件,如果是恢复下载,还包括以前的同步。

resumed_at_size   与下载恢复一起使用,指示当前下载的恢复点。

info   指向传送到 MLFileTransfer 的 info 对象。通过此指针可以访问 user_data 参数。

flags   提供额外信息。如果 MLFileTransfer 阻塞网络调用并且下载状态自上次调用观察器函数以来没有更改,则设置 MLFT_STATUS_FLAG_IS_BLOCKING 值。

stop   可设置为 true,以取消当前下载。您可以在对 MLFileTransfer 的后续调用中恢复此次下载,但只有在已设置 enable_resume 参数的情况下才可能。