iOS項目之wifi局域網傳輸文件到iPhone的簡單實現


        如今手機發展非常迅速,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)。

 1 //
 2 //  ViewController.m
 3 //  HTTPServerDemo
 4 //
 5 //  Created by shapp on 2017/8/25.
 6 //  Copyright © 2017年 sjx. All rights reserved.
 7 //
 8 
 9 #import "ViewController.h"
10 #import "HTTPServer.h"
11 #import "MyHTTPConnection.h"
12 #import "SJXCSMIPHelper.h"
13 
14 @interface ViewController ()
15 /* httpServer */
16 @property (nonatomic, strong) HTTPServer *httpServer;
17 
18 @end
19 
20 @implementation ViewController
21 
22 - (void)viewDidLoad {
23     [super viewDidLoad];
24     
25     // 創建服務器
26     self.httpServer = [[HTTPServer alloc] init];
27     // 設置發布服務器的類型
28     [self.httpServer setType:@"_http._tcp."];
29     // webPath是server搜尋HTML等文件的路徑
30     NSString *webPath = [[NSBundle mainBundle] resourcePath];
31     /*
32      * 設置文檔根目錄
33      * 因為請求 /index.html 將引用index.html文件在文檔根目錄。所以文件的要求相對於這個文檔根目錄。
34      */
35     [self.httpServer setDocumentRoot:webPath];
36     // 設置連接類
37     [self.httpServer setConnectionClass:[MyHTTPConnection class]];
38     NSError *err;
39     if ([self.httpServer start:&err]) {
40         NSString *ipString = [SJXCSMIPHelper deviceIPAdress];
41         NSLog(@"ip地址為:%@", ipString);
42         NSUInteger port = [self.httpServer listeningPort];
43         NSLog(@"開啟監聽的端口為:%zd", port);
44     }else{
45         NSLog(@"%@",err);
46     }
47 }
48 
49 @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,並實現代理方法。

 1 //
 2 //  ViewController.m
 3 //  GCDWebServerDemo
 4 //
 5 //  Created by shapp on 2017/8/25.
 6 //  Copyright © 2017年 sjx. All rights reserved.
 7 //
 8 
 9 #import "ViewController.h"
10 #import "GCDWebUploader.h"
11 #import "SJXCSMIPHelper.h"
12 
13 @interface ViewController ()<GCDWebUploaderDelegate>
14 /* webServer */
15 @property (nonatomic, strong) GCDWebUploader *webServer;
16 
17 @end
18 
19 @implementation ViewController
20 
21 - (void)viewWillAppear:(BOOL)animated {
22     [super viewWillAppear:animated];
23     
24     // 文件存儲位置
25     NSString* documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
26     // 創建webServer,設置根目錄
27     self.webServer = [[GCDWebUploader alloc] initWithUploadDirectory:documentsPath];
28     // 設置代理
29     self.webServer.delegate = self;
30     self.webServer.allowHiddenItems = YES;
31     // 開啟
32     if ([_webServer start]) {
33         NSString *ipString = [SJXCSMIPHelper deviceIPAdress];
34         NSLog(@"ip地址為:%@", ipString);
35         NSUInteger port = self.webServer.port;
36         NSLog(@"開啟監聽的端口為:%zd", port);
37     } else {
38         NSLocalizedString(@"GCDWebServer not running!", nil);
39     }
40 }
41 
42 - (void)viewDidDisappear:(BOOL)animated {
43     [super viewDidDisappear:animated];
44     
45     [self.webServer stop];
46     self.webServer = nil;
47 }
48 
49 #pragma mark - <GCDWebUploaderDelegate>
50 - (void)webUploader:(GCDWebUploader*)uploader didUploadFileAtPath:(NSString*)path {
51     NSLog(@"[UPLOAD] %@", path);
52 }
53 
54 - (void)webUploader:(GCDWebUploader*)uploader didMoveItemFromPath:(NSString*)fromPath toPath:(NSString*)toPath {
55     NSLog(@"[MOVE] %@ -> %@", fromPath, toPath);
56 }
57 
58 - (void)webUploader:(GCDWebUploader*)uploader didDeleteItemAtPath:(NSString*)path {
59     NSLog(@"[DELETE] %@", path);
60 }
61 
62 - (void)webUploader:(GCDWebUploader*)uploader didCreateDirectoryAtPath:(NSString*)path {
63     NSLog(@"[CREATE] %@", path);
64 }
65 
66 @end

        現在就可以運行一下代碼,如下圖:

        還是在網頁中輸入ip地址和端口試一試吧,效果如下圖:

        這個方式可以直接在網頁中管理文件了,用起來還是很不錯的哦~~

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

 

        以上就是現在常用的兩種方式,大家可以嘗試嘗試,一起學習交流。

 

注:本文屬作者原創,轉載請附上文章出處,謝謝~~~~。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM