使用 MobiLink 接口从 MobiLink 服务器下载文件。
ul_bool MLFileTransfer ( ml_file_transfer_info * info );
info 包含文件传输信息的结构。
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 参数的情况下才可能。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |