近日在做一个视频文件上传,其中涉及到WIFI局域网文件上传和iTunes文件导入,通过一周多的研究, 终于实现的该功能,我是用的框架是CocoaHTTPServer。具体原理是将手机作为服务器,只要电脑和移动设备连入同一热点,即可使用电脑访问iOS服务器的页面,利用POST实现文件的上传,从而与网页端实现文件互传。

实现

CocoaHTTPServer没有现成的向iOS设备传输的Sample,按照下面的步骤配置即可。

1.下载CocoaHTTPServer 

2.解压后,将CocoaHTTPServer-master目录下的Core导入工程。 

3.打开Samples/SimpleFileUploadServer,将其中的MyHTTPConnection类文件、web文件夹导入工程。 

4.打开Vendor,将其中的CocoaAsyncSocket、CocoaLumberjack文件夹导入。 

所有要导入的文件如下图所示:注意,其中的HYBIPHelper为获取本地ip的工具类,不是必要的,请忽视。 

ios开发 通过连接统一局域网进行传输数据 iphone局域网传输文件_CocoaHTTPServer

 

5.打开工程,打开MyHTTPConnection.m,根据标记#pragma mark multipart form data parser delegate跳转或者直接找到139行,- (void) processStartOfPartWithHeader:(MultipartMessageHeader*) header方法,将其中filePath的值修改为iOS的某个目录,这个路径是上传的文件存储的路径,

我们可以已Caches为例:

1.    <code class="language-Objective-C hljs objectives">//  NSString* uploadDirPath = [[config documentRoot] stringByAppendingPathComponent:@"upload"];
   
    2.    NSString *uploadDirPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];</code>

6.在适当的地方配置server启动,这里以AppDelegate为例:

#import "ViewController.h"
#import "HTTPServer.h"
#import "DDLog.h"
#import "DDTTYLogger.h"
#import "MyHTTPConnection.h"
   
    
   

   
    .     
   
// 代码实现部分
- (void)viewDidLoad {
    [superviewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    NSFileManager *fileManager=[NSFileManagerdefaultManager];
    NSArray *pathcaches =NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask, YES);
NSString* cacheDirectory = [pathcaches objectAtIndex:0];
if ([fileManager fileExistsAtPath:cacheDirectory]) {
NSArray *childerFiles=[fileManager subpathsAtPath:cacheDirectory];
for (NSString *fileNamein
// 文件名(本地文件视频名),用于界面展示
NSLog(@"fileName名  %@", fileName);
        }
    }

    
    self.view.backgroundColor = [UIColorwhiteColor];
    httpServer = [[HTTPServeralloc] init];
    [httpServersetType:@"_http._tcp."];
    // webPath是server搜寻HTML等文件的路径
NSString *webPath = [[NSBundlemainBundle] resourcePath];
httpServer setDocumentRoot:webPath];
    [httpServer setConnectionClass:[MyHTTPConnectionclass]];
NSError
if ([httpServerstart:&err]) {
NSLog(@"port %hu",[httpServerlisteningPort]);
else{
NSLog(@"%@",err);
    }
    // 获取ip地址, 可以看我昨天的博客()
NSString *ipStr = [selfgetIpAddresses];
NSLog(@"ip地址   %@", ipStr);
AppDelegate建两个属性ipStr和postStr, 便于传值, 害怕别的界面会用到
AppDelegate* tAppDel = (AppDelegate*)[UIApplicationsharedApplication].delegate;
ipStr
postStr = [NSStringstringWithFormat:@"%hu", [httpServerlisteningPort]];
    
}



07.


7.运行后,在控制台打印出端口号,再通过路由器或者热点工具查询设备的内网ip,通过ip:port访问即可,如果成功,会看到如下页面: 

ios开发 通过连接统一局域网进行传输数据 iphone局域网传输文件_itunes_02

 

8.如果上传成功,在控制台会打印存储到的位置,可以通过打开沙盒来验证。


补充:iTunes实现文件共享, 可以参考     

另外, 想修改文件中的的两个HTML文件, 主要是在MyHTTPConnection.m文件中修改, 通过判断path来修改对应的Response, 其实就是服务器发送请求, 你手机端在收到请求后返回对应的数据类型就行了。