如今手機發展非常迅速,app的種類也琳瑯滿目,而自從有了4G網之后,手機流量也越來越不夠用了。所以現在越來越多的app有了本地文件的管理功能,方便用戶隨意瀏覽手機文件的同時,也為用戶節約了流量的使用。
如上面的app截圖中的功能,現在越來越多的app都具有了在電腦上通過網頁wifi傳輸文件到手機端的功能,不僅有文字類,也有圖片類,還有視頻類,前提是電腦和手機都在同一個wifi下。這個功能的實現也很簡單,在這里介紹兩種方式來實現這個功能。
使用CocoaHTTPServer框架
CocoaHTTPServer在這里就不多做介紹,如果沒有的話,可以的GitHub上去下載:https://github.com/robbiehanson/CocoaHTTPServer。
下面開始簡單介紹一下CocoaHTTPServer的使用。
步驟1:
CocoaHTTPServer框架中的文件導入項目中,需要的文件有:
- Core文件夾下所有文件
- Vendor文件夾下所有文件
- 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框架中的文件導入項目中,需要的文件有:
- GCDWebDAVServer文件夾下所有文件
- GCDWebServer文件夾下所有文件
- 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
以上就是現在常用的兩種方式,大家可以嘗試嘗試,一起學習交流。