bomb上传文件到服务器

1、上传单个文件的方法

NSBundle *bundle = [NSBundle mainBundle];

NSString *path = [bundle pathForResource:@"title.plist" ofType:nil];

// NSString *fileString = [NSString stringWithFormat:@"%@/cs.txt" ,[bundle bundlePath] ];

BmobObject *obj = [[BmobObject alloc] initWithClassName:@"GameScore"];

BmobFile *file1 = [[BmobFile alloc] initWithFilePath:path];

[file1 saveInBackground:^(BOOL isSuccessful, NSError *error) {

NSLog(@"我走了");

//如果文件保存成功,则把文件添加到filetype列

if (isSuccessful) {

NSLog(@"成功了");

[obj setObject:file1 forKey:@"filetype"];

[obj saveInBackground];

//打印file文件的url地址

NSLog(@"file1 url %@",file1.url);

}else{

//进行处理

NSLog(@"%@",error);

}

}];

2、上传文件进度

在上传文件时,有时会需要获取上传文件进度的需求。这时,可以使用

-(void)saveInBackground:(BmobBooleanResultBlock)block withProgressBlock:(BmobProgressBlock)progressBlock;

如在下面的例子中,打印上传的进度

NSBundle    *bundle = [NSBundle mainBundle];

NSString *fileString = [NSString stringWithFormat:@"%@/cs.txt" ,[bundle bundlePath] ];

BmobObject *obj = [[BmobObject alloc] initWithClassName:@"gameScoreFile"];

BmobFile *file1 = [[BmobFile alloc] initWithClassName:@"Asc" withFilePath:fileString];

[file1 saveInBackground:^(BOOL isSuccessful, NSError *error) {

if (isSuccessful) {

[obj setObject:file1  forKey:@"userFile"];

[obj saveInBackground];

NSLog(@"file1 url %@",file1.url);

}

} withProgressBlock:^(CGFloat progress) {

NSLog(@"上传进度%.2f",progress);

}];

3、以分片的方式上传文件

分片上传文件和上传整个文件的机制有所不同,是先把整个文件进行分片(256KB一片),然后再进行一片一片的上传(具体实现可查看RestAPI文档)。当文件以分片的方式上传到Bmob服务器时,具有几种优势:

适合于尺寸较大的文件传输,通过切片来避免单个HTTP数据量过大而导致连接超时;

在网络条件较差的环境下,较小的尺寸可以有较高的上传成功率,从而避免无休止的失败重试;

在BmobSDK中对应的函数方法为

-(void)saveInBackgroundByDataSharding:(BmobBooleanResultBlock)block;

示例如下:

NSBundle    *bundle = [NSBundle mainBundle];

//上传cs.txt文件

NSString *fileString = [NSString stringWithFormat:@"%@/cs.txt" ,[bundle bundlePath] ];

BmobObject *obj = [[BmobObject alloc] initWithClassName:@"gameScoreFile"];

//创建BmobFile对象

BmobFile *file1 = [[BmobFile alloc] initWithFilePath:fileString];

[file1 saveInBackgroundByDataSharding:^(BOOL isSuccessful, NSError *error) {

if (isSuccessful) {

//如果成功,保存文件到userFile

[obj setObject:file1  forKey:@"userFile"];

[obj saveInBackground];

}else{

//失败,打印错误信息

NSLog(@"error: %@",[error description]);

}

} ];

4、批量上传文件

有时,开发者需要一次性上传多个文件,这是可以使用SDK提供的多个上传文件的方法来使用

NSBundle    *bundle = [NSBundle mainBundle];

//文件cncc.jpg的路径

NSString *fileString = [NSString stringWithFormat:@"%@/cncc.jpg" ,[bundle bundlePath] ];

//文件cs.txt的路径

NSString *fileString2 = [NSString stringWithFormat:@"%@/cs.txt" ,[bundle bundlePath] ];

[BmobFile filesUploadBatchWithPaths:@[fileString,fileString2]

progressBlock:^(int index, float progress) {

//index 上传数组的下标,progress当前文件的进度

NSLog(@"index %d progress %f",index,progress);

} resultBlock:^(NSArray *array, BOOL isSuccessful, NSError *error) {

//array 文件数组,isSuccessful 成功或者失败,error 错误信息

BmobObject *obj = [[BmobObject alloc] initWithClassName:@"gameScoreFile"];

for (int i = 0 ; i < array.count ;i ++) {

BmobFile *file = array [i];

NSString *key = [NSString stringWithFormat:@"userFile%d",i];

[obj setObject:file  forKey:key];

}

[obj saveInBackgroundWithResultBlock:^(BOOL isSuccessful, NSError *error) {

}];

}];

5、下载文件

获取文件对象只需通过-(id)objectForKey:(id)key;来得到,例如,

BmobFile *file = (BmobFile*)[gameScore objectForKey:@"filetype"];

可用通过file的url属性(file.url),来得到文件的地址进行下载。

6、删除文件

删除文件接口只能删除1.6.9版本之后上传的文件

如果需要删除文件,使用以下接口即可

/**

*  异步请求删除文件

*

*  @param block 返回删除结果与信息,如果删除成功,则无返回信息

*/

-(void)deleteInBackground:(BmobBooleanResultBlock)block;

当开发者需要一次性删除多个文件的时候,可以调用批量删除文件的接口

NSArray *array = @[@"http://bmob-cdn-1.b0.upaiyun.com/jpg/579c8dc6676e460b82d83c8eb5c8aaa5.jpg",@"http://bmob-cdn-1.b0.upaiyun.com/jpg/59e3817d6cec416ba99a126c9d42768f.jpg "]

[BmobFile filesDeleteBatchWithArray:array resultBlock:^(NSArray *array, BOOL isSuccessful, NSError *error) {

NSLog(@"fail delete array %@",array);

NSLog(@"error %@",error.localizedDescription);

NSLog(@"issuccessful %i",isSuccessful);

}];

你可能感兴趣的:(bomb上传文件到服务器)