248,AFNetworking 3的使用(二)

原创 2016年02月21日 21:29:21

/**

 *  实例4:执行下载文件的方法,可以监控下载进度

 */


@property (weak, nonatomic) IBOutletUIProgressView *progress;


@property (weak, nonatomic) IBOutletUILabel *progressPercent;



/**

 *  执行下载文件的方法,可以监控下载进度

 */

- (void)downloadFiles{

    //1,创建url

    NSString *url =@"http://192.168.0.103:8080/theaddressbook/videos/01-私人通讯录01-基本框架搭建.mp4";

    url = [url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

    

    //2,创建网络管理者

    AFHTTPSessionManager *sessionManager = [AFHTTPSessionManagermanager];

    

    //3,利用网路管理者下载数据

    NSURLRequest *request = [NSURLRequestrequestWithURL:[NSURLURLWithString:url]];

    

    /*

     destination

     - targetPath: 系统给我们自动写入的文件路径

     - block的返回值,要求返回一个URL,返回的这个URL就是剪切的位置的路径

     completionHandler

     - url :destination返回的URL == block的返回的路径

     */

    /*

     @property int64_t totalUnitCount;  需要下载文件的总大小

     @property int64_t completedUnitCount; 当前已经下载的大小

     */

    NSURLSessionDownloadTask *downTask = [sessionManagerdownloadTaskWithRequest:requestprogress:^(NSProgress *downloadProgress){

        NSLog(@"%lld/%lld",downloadProgress.completedUnitCount,downloadProgress.totalUnitCount);

        dispatch_async(dispatch_get_main_queue(), ^{

            self.progress.progress =1.0 * downloadProgress.completedUnitCount / downloadProgress.totalUnitCount;

            int precentData = (int)(1.0 * downloadProgress.completedUnitCount / downloadProgress.totalUnitCount * 100);

            NSString *result = [NSStringstringWithFormat:@"%i",precentData];

            result = [result stringByAppendingString:@"%"];

            self.progressPercent.text = result;

        });

    } destination:^NSURL *_Nonnull(NSURL *_Nonnull targetPath,NSURLResponse * _Nonnull response) {

        NSString *cachesPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES)lastObject];

        NSString *path = [cachesPath stringByAppendingPathComponent:response.suggestedFilename];

        return [NSURLfileURLWithPath:path];

    } completionHandler:^(NSURLResponse *_Nonnull response,NSURL * _Nullable filePath,NSError * _Nullable error) {

        //此处已经在主线程了

        NSLog(@"filePath = %@",filePath.absoluteString);

    }];

    

    /*

     要跟踪进度,需要使用 NSProgress,是在 iOS 7.0推出的,专门用来跟踪进度的类!

     NSProgress只是一个对象!如何跟踪进度!-> KVO对属性变化的监听!

     @property int64_t totalUnitCount;        总单位数

     @property int64_t completedUnitCount;    完成单位数

     */

    

    // 4.启动任务

    [downTask resume];

}



/**

 *  实例五:上传文件

 */



IOS端的代码:

- (void)uploadFiles{

    //1,创建网络管理者

    AFHTTPSessionManager *sessionManager = [AFHTTPSessionManager manager];

    

    //2,传递的参数

    NSDictionary *paras = @{@"username":@"ljs"};

    

    //3formData:专门用于拼接需要上传的数据

    NSString *url = @"http://192.168.0.103:8080/theaddressbook/uploadController/doPost.do";

    [sessionManager POST:url parameters:paras constructingBodyWithBlock:^(id<AFMultipartFormData_Nonnull formData) {

        

        /**

         *  例子一 上传照片 ImageTest.png

         */

        //NSData *data = [ViewController getImageData];

        //[formData appendPartWithFileData:data name:@"file" fileName:@"ImageTest.png" mimeType:@"image/png"];

        

        /**

         *  例子二 上传文件 fileTest.txt

         */

        //NSData *data = [ViewController getFileData];

        //[formData appendPartWithFileData:data name:@"file" fileName:@"fileTest.txt" mimeType:@"text/txt"];

        

        /**

         *  例子三 上传文件 audioTest.mp3

         */

        //NSData *data = [ViewController getAudioData];

        //[formData appendPartWithFileData:data name:@"file" fileName:@"audioTest.mp3" mimeType:@"audio/mp3"];

        

        

        /**

         *  例子四 上传文件 vidioTest.mp4

         */

        NSData *data = [ViewController getVidioData];

        [formData appendPartWithFileData:data name:@"file" fileName:@"vidioTest.mp4" mimeType:@"video/mp4"];



        

    } progress:^(NSProgress * _Nonnull uploadProgress) {

        NSLog(@"%lld/%lld",uploadProgress.completedUnitCount,uploadProgress.totalUnitCount);

    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {

        NSLog(@"上传成功!");

    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

        NSLog(@"上传失败!");

    }];

}


//获取沙盒中Documents的路径

+(NSString *)documentsPath {

    

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

    

    return [paths objectAtIndex:0];

    

}


//获得document文件路径

+ (NSString *)getFilePath:(NSString *)fileName{

    NSString *path = [self documentsPath];

    path = [path stringByAppendingPathComponent:fileName];

    NSLog(@"路径为: %@",path);

    return path;

}


//判断文件是否存在

+ (BOOL)FileIsExists:(NSString*) checkFile{

    

    if([[NSFileManager defaultManager]fileExistsAtPath:checkFile])

    {

        return true;

    }

    return  false;

}


//获取图片

+ (NSData *)getImageData{

    NSString *imagePath = [self getFilePath:@"imageTest.png"];

    NSData *imageData = nil;

    if([self FileIsExists:imagePath]){

        imageData = [NSData dataWithContentsOfFile:imagePath];

    }

    return  imageData;

}


//获取文件

+ (NSData *)getFileData{

    NSString *filePath = [self getFilePath:@"fileTest.txt"];

    NSData *fileData = nil;

    if([self FileIsExists:filePath]){

        fileData = [NSData dataWithContentsOfFile:filePath];

    }

    return  fileData;

}


//获取音频

+ (NSData *)getAudioData{

    NSString *audioPath = [self getFilePath:@"audioTest.mp3"];

    NSData *audioData = nil;

    if([self FileIsExists:audioPath]){

        audioData = [NSData dataWithContentsOfFile:audioPath];

    }

    return  audioData;

}


//获取视频

+ (NSData *)getVidioData{

    NSString *vidioPath = [self getFilePath:@"audioTest.mp3"];

    NSData *vidioData = nil;

    if([self FileIsExists:vidioPath]){

        vidioData = [NSData dataWithContentsOfFile:vidioPath];

    }

    return  vidioData;

}



/*

 备注

 NSString *imagePath = [[NSBundle mainBundle] pathForResource:@”apple” ofType:@”png”];

 UIImage *appleImage = [[UIImage alloc] initWithContentsOfFile:imagePath];

 */


Java服务器端的代码:

package com.ljs.controller;


import java.io.File;

import java.io.IOException;

import java.util.List;

import java.util.UUID;


import javax.annotation.Resource;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


import org.apache.commons.fileupload.FileItem;

import org.apache.commons.fileupload.FileUploadBase;

import org.apache.commons.fileupload.FileUploadException;

import org.apache.commons.fileupload.disk.DiskFileItemFactory;

import org.apache.commons.fileupload.servlet.ServletFileUpload;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;


import com.ljs.service.IUsersContactsOperationImp;


@Controller

@RequestMapping(value = "/uploadController")

public class UploadController {


@Resource

private IUsersContactsOperationImp operationImp;


@SuppressWarnings("deprecation")

@RequestMapping(value = "/doPost.do", method = RequestMethod.POST)

public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {

// 获取数据

// 创建一个临时文件存放要上传的文件,第一个参数为上传文件大小,第二个参数为存放的临时目录

DiskFileItemFactory factory = new DiskFileItemFactory(1024 * 1024 * 5,

new File("/Users/JS/Desktop/Images/temp1"));

// 设置缓冲区大小为 5M

factory.setSizeThreshold(1024 * 1024 * 5);

// 创建一个文件上传的句柄

ServletFileUpload upload = new ServletFileUpload(factory);


// 设置上传文件的整个大小和上传的单个文件大小

upload.setSizeMax(1024 * 1024 * 50);

upload.setFileSizeMax(1024 * 1024 * 5);


// 图片

String[] ImagesExts = { "jpg", "png" };


// 视频

String[] videosExts = { "mp4", "avi", "mov" };


// 音频

String[] audiosExts = { "mp3" };


// 文件

String[] filesExts = { "txt", "doc", "docx", "plist" };

try { // 把页面表单中的每一个表单元素解析成一个

List<FileItem> items = upload.parseRequest(request);

for (FileItem fileItem : items) {

// 如果是一个普通的表单元素(type不是file的表单元素)

if (fileItem.isFormField()) {

System.out.println("--------普通的表单元素----------");

System.out.println("key = " + fileItem.getFieldName());

// 得到对应表单元素的名字

System.out.println("values = " + fileItem.getString());

// 得到表单元素的值

} else { // 获取文件的后缀名

System.out.println("--------视频,图片,音频等文件 ----------");

String fileFullName = fileItem.getName();// 得到文件的名字

System.out.println("文件名字 = " + fileFullName);

String fileName = fileFullName.substring(0, fileFullName.lastIndexOf("."));

String fileExt = fileFullName.substring(fileFullName.lastIndexOf(".") + 1, fileFullName.length());

System.out.println("文件的后缀名 = " + fileExt);

if (judgeFileType(ImagesExts, fileExt)) {

System.out.println("开始存储照片了!");

try {

// 将文件上传到项目的upload目录并命名

fileItem.write(

new File("/DevelopTool/eclipseworkplace/theaddressbook/WebContent/resources/images/"

+ fileName + "." + fileExt));

} catch (Exception e) {

e.printStackTrace();

}

} else if (judgeFileType(videosExts, fileExt)) {

System.out.println("开始存储视频了!");

try {

fileItem.write(

new File("/DevelopTool/eclipseworkplace/theaddressbook/WebContent/resources/videos/"

+ fileName + "." + fileExt));

} catch (Exception e) {

e.printStackTrace();

}

} else if (judgeFileType(audiosExts, fileExt)) {

System.out.println("开始存储音频了!");

try {

fileItem.write(

new File("/DevelopTool/eclipseworkplace/theaddressbook/WebContent/resources/audios/"

+ fileName + "." + fileExt));

} catch (Exception e) {

e.printStackTrace();

}

} else if (judgeFileType(filesExts, fileExt)) {

System.out.println("开始存储文件了!");

try {

fileItem.write(

new File("/DevelopTool/eclipseworkplace/theaddressbook/WebContent/resources/files/"

+ fileName+ "." + fileExt));

} catch (Exception e) {

e.printStackTrace();

}

} else {

System.out.println("该文件类型不能够上传");

}

}

}

} catch (FileUploadBase.SizeLimitExceededException e) {

System.out.println("整个请求的大小超过了规定的大小...");

} catch (FileUploadBase.FileSizeLimitExceededException e) {

System.out.println("请求中一个上传文件的大小超过了规定的大小...");

} catch (FileUploadException e) {

e.printStackTrace();

}

}

/*

* 判断文件类型

*/

private boolean judgeFileType(String[] types,String type){

boolean result = false;

for (String typeStr : types) {

if (typeStr.equals(type)) {

result = true;

break;

}

}

return result;

}

}


/***

 * 随机产生文件的名称

 * fileItem.write(new File("/DevelopTool/eclipseworkplace/theaddressbook/WebContent/resources/images/" + UUID.randomUUID().toString() + "." + fileExt));

 * 

 */




相关文章推荐

247,AFNetworking 3的使用

/**  *  实战1.通过AFNetworkReachabilityManager 可以用来检测网络状态的变化  */ - (void)netWorkMonitor{     //网...

使用AFNetworking 3 内存泄露

在使用instruments做内存泄漏分析时,发现所有使用如下语句的地方都有内存泄漏,OMG: if (!_manager) { _manager = [AFHTTPSessio...
  • d1w2hj
  • d1w2hj
  • 2016年06月30日 20:09
  • 6259

USACO 2016 US Open Contest, Gold Problem 3. 248

http://usaco.org/index.php?page=viewproblem2&cpid=647 和2048类似的游戏,大致意思就是输入一个N,数列的长度,数列中相邻两个元素如果相同可以合...
  • Bendaai
  • Bendaai
  • 2017年02月10日 20:47
  • 218

AFNetworking 3.x 简单使用

由于iOS 7 和 Mac OS X 10.9 Mavericks 中一个显著的变化就是对 Foundation URL 加载系统的彻底重构。而且现在AFN 3.x版本 完全摒弃了NSURLCon...

iOS之AFNetworking3.x使用自签名证书建立https连接

配置前准备cer证书文件 AFNetworking3 导入工程啥的也就不说了下面开始干正经事导入文件到项目 为站点添加白名单 添加主要代码-(void)postToWeb{ AFHTTPS...

3-H.248协议原理

  • 2012年02月07日 17:55
  • 1.31MB
  • 下载

H.248 v1,v2,及v3标准

  • 2008年11月30日 11:31
  • 1.37MB
  • 下载

AFNetworking3同步请求另类解决方案(阻塞线程)

1.情景:由于公司业务需求,需要在iPad端架设服务器,当用户手机扫码连接wifi时,公司后台会重定向到我iPad端的服务器,并通过Socket将必要的用户信息发给iPad端,iPad验证用户信息,然...
  • d1w2hj
  • d1w2hj
  • 2016年04月08日 20:46
  • 3921

AFNetWorking使用

  • 2015年11月20日 11:01
  • 60KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:248,AFNetworking 3的使用(二)
举报原因:
原因补充:

(最多只允许输入30个字)