248,AFNetworking 3的使用(二)

来源:互联网 发布:爱思助手mac下载 编辑:程序博客网 时间:2024/06/01 08:11

/**

 *  实例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 = [AFHTTPSessionManagermanager];

    

    //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 = [ViewControllergetVidioData];

        [formData appendPartWithFileData:dataname:@"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 = [selfdocumentsPath];

    path = [path stringByAppendingPathComponent:fileName];

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

    return path;

}


//判断文件是否存在

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

    

    if([[NSFileManagerdefaultManager]fileExistsAtPath:checkFile])

    {

        return true;

    }

    return  false;

}


//获取图片

+ (NSData *)getImageData{

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

    NSData *imageData = nil;

    if([selfFileIsExists:imagePath]){

        imageData = [NSData dataWithContentsOfFile:imagePath];

    }

    return  imageData;

}


//获取文件

+ (NSData *)getFileData{

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

    NSData *fileData = nil;

    if([selfFileIsExists:filePath]){

        fileData = [NSData dataWithContentsOfFile:filePath];

    }

    return  fileData;

}


//获取音频

+ (NSData *)getAudioData{

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

    NSData *audioData = nil;

    if([selfFileIsExists:audioPath]){

        audioData = [NSData dataWithContentsOfFile:audioPath];

    }

    return  audioData;

}


//获取视频

+ (NSData *)getVidioData{

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

    NSData *vidioData = nil;

    if([selfFileIsExists: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 IUsersContactsOperationImpoperationImp;


@SuppressWarnings("deprecation")

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

public void doPost(HttpServletRequest request, HttpServletResponseresponse) 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 (FileItemfileItem : 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 (Exceptione) {

e.printStackTrace();

}

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

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

try {

fileItem.write(

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

+ fileName +"." + fileExt));

} catch (Exceptione) {

e.printStackTrace();

}

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

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

try {

fileItem.write(

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

+ fileName +"." + fileExt));

} catch (Exceptione) {

e.printStackTrace();

}

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

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

try {

fileItem.write(

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

+ fileName+"." + fileExt));

} catch (Exceptione) {

e.printStackTrace();

}

} else {

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

}

}

}

} catch (FileUploadBase.SizeLimitExceededExceptione) {

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

} catch (FileUploadBase.FileSizeLimitExceededExceptione) {

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

} catch (FileUploadExceptione) {

e.printStackTrace();

}

}

/*

* 判断文件类型

*/

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

booleanresult = false;

for (StringtypeStr : types) {

if (typeStr.equals(type)) {

result = true;

break;

}

}

returnresult;

}

}


/***

 * 随机产生文件的名称

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

 * 

 */




0 0
原创粉丝点击