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"};
//3,formData:专门用于拼接需要上传的数据
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];
*/
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));
*
*/
- 248,AFNetworking 3的使用(二)
- 248,AFNetworking 3的使用(一)
- 连载二--AFNetworking的简单使用
- 247,AFNetworking 3的使用
- AFNetWorking的使用(请求)
- AFNetworking 的核心 AFURLSessionManager(二)
- AFNetworking 的核心 AFURLSessionManager(二)
- 使用AFNetworking (2.2.3)遇到的问题
- 使用AFNetworking (2.2.3)遇到的问题
- 使用AFNetworking (2.2.3)遇到的问题
- AFNetworking的使用
- AFNetWorking的基本使用
- AFNetWorking 的简单使用
- AFNetworking 的使用
- AFNetworking的使用
- AFNetworking 的使用
- AFNetWorking的使用配置
- AFNetworking的使用
- 【bzoj1305】[CQOI2009]dance跳舞 最大流+二分答案
- POJ 1502 - MPI Maelstrom
- 京东轮播图
- hdu2141 Can you find it? (二分)
- 【BZOJ3598】【SCOI2014】方伯伯的商场之旅
- 248,AFNetworking 3的使用(二)
- iOS-UI-基本控件之UITextField
- android图片查看(2)
- c++primer阅读笔记之函数
- sql注入
- oracle之表对象操作
- bzoj3209 花神的数论题
- 17.指针与数组
- HDU_1711_NumberSequence