如今手机发展非常迅速,app的种类也琳琅满目,而自从有了4G网之后,手机流量也越来越不够用了。所以现在越来越多的app有了本地文件的管理功能,方便用户随意浏览手机文件的同时,也为用户节约了流量的使用。

如上面的app截图中的功能,现在越来越多的app都具有了在电脑上通过网页wifi传输文件到手机端的功能,不仅有文字类,也有图片类,还有视频类,前提是电脑和手机都在同一个wifi下。这个功能的实现也很简单,在这里介绍两种方式来实现这个功能。

方式一:使用CocoaHTTPServer框架

CocoaHTTPServer在这里就不多做介绍,如果没有的话,可以的GitHub上去下载:https://github.com/robbiehanson/CocoaHTTPServer

下面开始简单介绍一下CocoaHTTPServer的使用。

步骤1:

将CocoaHTTPServer框架中的文件导入项目中,需要的文件有:

1. Core文件夹下所有文件

2. Vendor文件夹下所有文件

3. Samples -> SimpleFileUploadServer -> SimpleFileUploadServer -> MyHTTPConnection.h + MyHTTPConnection.m + web文件夹下所有文件

文件参考以下图片:

导入项目中后如下图所示:

步骤2:

在 MyHTTPConnection.m 文件的 processStartOfPartWithHeader: 方法中,找到对应的地方,修改文件存储位置(这里以Document为例),如下图所示:

步骤3:

配置 httpServer。代码中有一个获取ip地址的方法,可以在网上搜,只要能获取到手机设备的ip地址就可以了,然后封装成一个工具类(SJXCSMIPHelper)。

 //
// ViewController.m
// HTTPServerDemo
//
// Created by shapp on 2017/8/25.
// Copyright © 2017年 sjx. All rights reserved.
// #import "ViewController.h"
#import "HTTPServer.h"
#import "MyHTTPConnection.h"
#import "SJXCSMIPHelper.h" @interface ViewController ()
/* httpServer */
@property (nonatomic, strong) HTTPServer *httpServer; @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad]; // 创建服务器
self.httpServer = [[HTTPServer alloc] init];
// 设置发布服务器的类型
[self.httpServer setType:@"_http._tcp."];
// webPath是server搜寻HTML等文件的路径
NSString *webPath = [[NSBundle mainBundle] resourcePath];
/*
* 设置文档根目录
* 因为请求 /index.html 将引用index.html文件在文档根目录。所以文件的要求相对于这个文档根目录。
*/
[self.httpServer setDocumentRoot:webPath];
// 设置连接类
[self.httpServer setConnectionClass:[MyHTTPConnection class]];
NSError *err;
if ([self.httpServer start:&err]) {
NSString *ipString = [SJXCSMIPHelper deviceIPAdress];
NSLog(@"ip地址为:%@", ipString);
NSUInteger port = [self.httpServer listeningPort];
NSLog(@"开启监听的端口为:%zd", port);
}else{
NSLog(@"%@",err);
}
} @end

现在就可以运行一下代码,如下图:

在网页输入ip地址和端口,就可以使用了。

demo下载:https://github.com/sjxjjx/HTTPServerDemo

方式二:使用GCDWebServer框架

同上面一样,首先去GitHub下载:https://github.com/swisspol/GCDWebServer

下面直接进入正题:

步骤1:

将GCDWebServer框架中的文件导入项目中,需要的文件有:

1. GCDWebDAVServer文件夹下所有文件

2. GCDWebServer文件夹下所有文件

3. GCDWebUploader文件夹下所有文件

文件参考以下图片:

步骤2:

添加动态库文件,如下图所示:

步骤3:

配置Header Search Paths  -> $(SDKROOT)/usr/include/libxml2,如下图所示:

步骤4:

配置webServer,并实现代理方法。

 //
// ViewController.m
// GCDWebServerDemo
//
// Created by shapp on 2017/8/25.
// Copyright © 2017年 sjx. All rights reserved.
// #import "ViewController.h"
#import "GCDWebUploader.h"
#import "SJXCSMIPHelper.h" @interface ViewController ()<GCDWebUploaderDelegate>
/* webServer */
@property (nonatomic, strong) GCDWebUploader *webServer; @end @implementation ViewController - (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated]; // 文件存储位置
NSString* documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
// 创建webServer,设置根目录
self.webServer = [[GCDWebUploader alloc] initWithUploadDirectory:documentsPath];
// 设置代理
self.webServer.delegate = self;
self.webServer.allowHiddenItems = YES;
// 开启
if ([_webServer start]) {
NSString *ipString = [SJXCSMIPHelper deviceIPAdress];
NSLog(@"ip地址为:%@", ipString);
NSUInteger port = self.webServer.port;
NSLog(@"开启监听的端口为:%zd", port);
} else {
NSLocalizedString(@"GCDWebServer not running!", nil);
}
} - (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated]; [self.webServer stop];
self.webServer = nil;
} #pragma mark - <GCDWebUploaderDelegate>
- (void)webUploader:(GCDWebUploader*)uploader didUploadFileAtPath:(NSString*)path {
NSLog(@"[UPLOAD] %@", path);
} - (void)webUploader:(GCDWebUploader*)uploader didMoveItemFromPath:(NSString*)fromPath toPath:(NSString*)toPath {
NSLog(@"[MOVE] %@ -> %@", fromPath, toPath);
} - (void)webUploader:(GCDWebUploader*)uploader didDeleteItemAtPath:(NSString*)path {
NSLog(@"[DELETE] %@", path);
} - (void)webUploader:(GCDWebUploader*)uploader didCreateDirectoryAtPath:(NSString*)path {
NSLog(@"[CREATE] %@", path);
} @end

现在就可以运行一下代码,如下图:

还是在网页中输入ip地址和端口试一试吧,效果如下图:

这个方式可以直接在网页中管理文件了,用起来还是很不错的哦~~

    demo下载:https://github.com/sjxjjx/GCDWebServerDemo

以上就是现在常用的两种方式,大家可以尝试尝试,一起学习交流。

注:本文属作者原创,转载请附上文章出处,谢谢~~~~。

iOS项目之wifi局域网传输文件到iPhone的简单实现的更多相关文章

  1. 利用CocoaHTTPServer实现wifi局域网传输文件到iphone

    背景 近日在做一个代码阅读器,其中涉及到代码文件的上传,之前看到过许多app支持局域网传文件,因此就通过查询和研究实现了此功能,我是用的框架是CocoaHTTPServer. 原理 CocoaHTTP ...

  2. Android网络编程只局域网传输文件

    Android网络编程之局域网传输文件: 首先创建一个socket管理类,该类是传输文件的核心类,主要用来发送文件和接收文件 具体代码如下: package com.jiao.filesend; im ...

  3. 关于ios项目沙盒中的文件和Xcode项目创建的文件

    //1.1获取在Xcode项目打开的情况下创建的Plist文件 NSString *path = [[NSBundle mainBundle]pathForResource:@"Profes ...

  4. iOS项目开发日常之创建文件(协议、类、分类、扩展)

    iOS项目开发过程中,是以不断创建文件的形式进行着的. 创建得比较频繁的文件类型是: 这两个类型中创建的文件有:子类.分类.扩展.协议四种文件,如下:    这四类文件是频繁创建的,我们来看一下各自分 ...

  5. ios学习总结(1) -- 创建第一个ios项目

    原文地址 下载并打开xcode. 接着新建一个工程,如下图所示: 点击Create a new Xcode project,之后选择ios下的Application,点击Single View App ...

  6. SCP远程传输文件

    今天想用SCP通过局域网传输文件到服务器,但却发生了下面这种事情: 上面描述 连接主机端口22被拒绝,失去连接 后发现因为没有指定端口,我服务器这边改了端口,所以根据自己情况改一下命令 scp -29 ...

  7. golang 远程传输文件

    概述 之前有一篇介绍如何使用 golang 通过SSH协议来执行远程命令:golang 执行远程命令 同样,通过SSH协议也可以使用 golang 来远程传输文件. 除了 SSH 的库,为了传输文件, ...

  8. golang sftp传输文件

    之前有一篇介绍如何使用 golang 通过SSH协议来执行远程命令:golang执行远程命令 同样,通过SSH协议也可以使用 golang 来远程传输文件. 除了 SSH 的库,为了传输文件,还需要用 ...

  9. ios项目里扒出来的json文件

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Menlo; color: #000000 } p.p2 { margin: 0.0px 0. ...

随机推荐

  1. STL—vector空间的动态增长

    vector空间的动态增长     当添加元素时,如果vector空间大小不足,则会以原大小的两倍另外配置一块较大的新空间,然后将原空间内容拷贝过来,在新空间的内容末尾添加元素,并释放原空间.vect ...

  2. 一步一步学Vue (一)

    vue应该是前端主流框架中的集成大成者,它吸取了knockout,angular,react设置avalon的经验,支持各种模式写法,入门很简单,从本章开始,会记录学习vue中的点点滴滴,以笔记的形式 ...

  3. redhat6.4配置yum

    redhat6.4配置本地yum 1. 挂载(我喜欢放在/mnt下面)     mount -t auto *** /mnt/redhat     或     cp *** /mnt/redhat   ...

  4. 初涉算法——C++

    一.sstream头文件运用 题目:输入数据的每行包括若干个(至少一个)以空格隔开的整数,输出每行中所有整数之和. #include<iostream> #include<cstri ...

  5. 游戏里的动态阴影-ShadowMap实现原理

    ShadowMap是比较流行的实时阴影实现方案,原理比较简单,但真正实现起来还是会遇到很多问题的,我这里主要记录下实现方式 先看效果 凹凸地形上也有阴影 实现原理 ShadowMap技术是从灯光空间用 ...

  6. Result Maps collection does not contain value for...

    出现上述错误 主要是因为你的select标签内部的resultMap属性指向的不正确 在sql文件中只要有一个resultMap或resultType属性指向错误,则在这个文件中其余正确的语句也不能执 ...

  7. (转)盒子概念和DiV布局

    CSS盒子和DIV布局 (2013-11-24 16:17:29) 转载▼ 一.认识div层 1.<DIV>标记是一个区块容器标记,在标记之间可以放置其他一些HTML元素,例如p,h1,t ...

  8. 自动生成proto Js语句

    在与后端的WebSocket通信时,前端要带一个proto文件是一个累赘的事情.首先是明显的曝光了协议实体对象,再一个浏览器客户端很容易会缓存该文件,新的协议更新可能导致客户端不能使用,另外在cdn服 ...

  9. git 安装 和 基本操作

    林纳斯的小故事 感兴趣的同学可以自己百度一下 版本控制常用svn git @@@svn 1 搭建环境 server:visualSVN Serverserver port: https 默认443ht ...

  10. 网关(Gatesvr) 设计(1)

    Gate解决的问题: 1.用户在服务端的实例可以在不同的进程中,也可以移动到同一个进程中.2.用户只需要与服务端建立有限条连接,即可以访问到任意服务进程.这个连接的数量不会随服务进程的数量增长而线性增 ...