使用 SDK
使用场景
TMFUploader
基于安全网关 TMFShark
提供分片上传功能和断点续传功能,可以将要上传的文件分成多个数据块( TMFUploader
里面称之为 FileFragment
)来上传,上传完成之后 TMFUploader
自动调用 TMFShark
接口将这些 FileFragment
合成一个 File
来达到断点续传的效果。
通常使用简单上传来上传较大的文件时,如果上传过程中出现了网络错误,那么此次上传失败,重试必须从文件起始位置上传。针对这种情况,可以使用分片上传来达到断点续传的效果。
相对其他上传方式,分片上传适用于以下场景:
- 断点续传。
存在中途暂停的操作,可以从上次上传完成的FileFragment
的位置继续上传。 - 不稳定的网络环境。
移动环境网络波动较大,当出现上传失败的时候,可以仅上传失败的FileFragment
,不需要重新上传其他的FileFragment
。
自定义上传配置
获取上传配置的实例对象
接口定义
+ (TMFUploadConfiguration *)configuration;
调用示例
TMFUploadConfiguration *configuration = [TMFUploadConfiguration configuration];
创建文件资源标识
生成文件资源标识实例对象。
接口定义
+ (TMFUploadFileURI *)URIWithFilePath:(NSString *)filePath businessId:(NSString *)businessId;
+ (TMFUploadFileURI *)URIWithFilePath:(NSString *)filePath businessId:(NSString *)businessId params:(NSDictionary *)params;
参数说明
参数 | 类型 | 描述 | 必选 |
---|---|---|---|
filePath | NSString | 本地文件沙盒路径 | Y |
businessId | NSString | 上传业务标识 | Y |
params | NSDictionary | 上传自定义扩展参数 | N |
返回值
类型 | 描述 |
---|---|
TMFUploadFileURI | 文件资源标识实例对象 |
调用示例
NSString *path = [NSTemporaryDirectory() stringByAppendingPathComponent:@"test.png"];
TMFUploadFileURI *fileURI = [TMFUploadFileURI URIWithFilePath:path businessId:@"busId1"];
NSString *path = [NSTemporaryDirectory() stringByAppendingPathComponent:@"test.png"];
NSDictionary *param = @{@"tenantId":@"photo",@"type":@"jpg",@"fileName":@"testImg"};
TMFUploadFileURI *fileURI = [TMFUploadFileURI URIWithFilePath:path businessId:@"busId1" params:param];
创建分片上传任务
为本地文件标识创建一个上传任务的实例。
接口定义
TMF默认文件服务器,返回 URL。
- (nullable TMFUploadTask *)uploadTaskWithFileURI:(TMFUploadFileURI *)fileURI progressHandler:(nullable void (^)(NSProgress * _Nullable progress))progressHandler completionHandler:(nullable void (^)(NSString * _Nullable URL, NSError * _Nullable error))completionHandler;
返回文件服务器原始数据 result。
- (nullable TMFUploadTask *)uploadTaskWithFileURI:(TMFUploadFileURI *)fileURI progressHandler:(nullable void (^)(NSProgress * _Nullable progress))progressHandler completionOriginalHandler:(nullable void (^)(NSData * _Nullable result, NSError * _Nullable error))completionHandler;
参数说明
参数 | 类型 | 描述 | 必选 |
---|---|---|---|
fileURI | TMFUploadFileURI | 本地文件资源标识 | Y |
progressHandler 回调
参数 | 类型 | 描述 | 必选 |
---|---|---|---|
progress | NSProgress | 上传进度 | Y |
completionHandler 回调1
参数 | 类型 | 描述 | 必选 |
---|---|---|---|
URL | NSString | 上传成功后的文件 URL | Y |
error | NSError | 上传失败时的错误信息 | N |
completionHandler 回调2
参数 | 类型 | 描述 | 必选 |
---|---|---|---|
result | NSData | 上传成功后的服务器透传消息 | Y |
error | NSError | 上传失败时的错误信息 | N |
其中,TMFUploadFileURI 的创建见 创建文件资源标识。
返回值
类型 | 描述 |
---|---|
TMFUploadTask | 上传任务实例对象 |
调用示例
// fileURI:
NSString *path = [NSTemporaryDirectory() stringByAppendingPathComponent:@"test.png"]
TMFUploadFileURI *fileURI = [TMFUploadFileURI URIWithFilePath:path businessId:@"busId1"];
// uploadTask:
/*
TMFUploadTask *uploadTask = [[TMFUploadManager defaultManager] uploadTaskWithFileURI:fileURI progressHandler:^(NSProgress * _Nullable progress) {
NSLog(@"%@",progress);
} completionHandler:^(NSString * _Nullable URL, NSError * _Nullable error) {
NSLog(@"URL: %@, error : %@",URL, error);
}];
*/
TMFUploadTask *uploadTask = [[TMFUploadManager defaultManager] uploadTaskWithFileURI:fileURI progressHandler:^(NSProgress * _Nullable progress) {
NSLog(@"%@",progress);
} completionOriginalHandler:^(NSData * _Nullable result, NSError * _Nullable error) {
NSString *resString = [[NSString alloc] initWithData:result encoding:NSUTF8StringEncoding];
NSLog(@"result: %@, error : %@",resString, error);
}];
[uploadTask resume];
自定义上传任务管理对象
根据自定义上传配置生成上传任务管理对象实例
接口定义
+ (TMFUploadManager *)managerWithConfiguration:(TMFUploadConfiguration *)configuration;
参数说明
参数 | 类型 | 描述 | 必选 |
---|---|---|---|
configuration | TMFUploadConfiguration | 上传配置的实例对象 | Y |
其中,TMFUploadConfiguration 的创建见 自定义上传配置。
返回值
类型 | 描述 |
---|---|
TMFUploadManager | 上传任务管理对象 |
调用示例
// configuration:
TMFUploadConfiguration *configuration = [TMFUploadConfiguration configuration];
configuration.allowsCellularAccess = NO;
// uploadManager:
TMFUploadManager *uploadManager = [TMFUploadManager managerWithConfiguration:configuration];