Swift - 做一个简单的无线U盘(手机端Http服务器搭建)
生活随笔
收集整理的這篇文章主要介紹了
Swift - 做一个简单的无线U盘(手机端Http服务器搭建)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
由于iOS系統(tǒng)的封閉性,在數(shù)據(jù)傳輸方面十分不方便。不像安卓設(shè)備,直接連接電腦就能當(dāng)U盤(pán)使用。所以一般我們?nèi)绻胕Phone臨時(shí)存取個(gè)東西,要么使用數(shù)據(jù)線連接iTunes,要么手機(jī)電腦都登上QQ,使用QQ來(lái)傳輸。
但這兩種方式都略顯不便,所以市面上出現(xiàn)了無(wú)線U盤(pán)這類的APP。原理很簡(jiǎn)單,就是軟件打開(kāi)后會(huì)啟動(dòng)HTTP服務(wù)器,這時(shí)電腦端使用瀏覽器輸入 手機(jī)的ip,就可以通過(guò)web頁(yè)面的形式訪問(wèn)到這個(gè)軟件的用戶文檔。同時(shí)在這個(gè)web頁(yè)面里,直接可以進(jìn)行文件的上傳,下載,刪除等操作。?
下面演示如何開(kāi)發(fā)一個(gè)無(wú)線U盤(pán),實(shí)現(xiàn)功能如下: 1,程序啟動(dòng)后會(huì)啟動(dòng)Web服務(wù),并監(jiān)聽(tīng)設(shè)置的端口,等待請(qǐng)求 2,電腦瀏覽器輸入手機(jī)ip+端口,在web頁(yè)上會(huì)列出用戶文檔里所有文件 3,點(diǎn)擊文件,即可下載
效果圖如下:
詳細(xì)步驟: 1,這里用到了Swift Taylor(一個(gè)用Swift編寫(xiě)HTTP服務(wù)器的開(kāi)發(fā)包)。先把Taylor整個(gè)包引入到項(xiàng)目。
2,添加個(gè)頭文件bridge.h,并添加到編譯參數(shù)里(Taylor內(nèi)部又使用了一個(gè)叫CocoaAsyncSocket的socket庫(kù),使用Objective-C寫(xiě)的)
3,頁(yè)面代碼?ViewController.swift
調(diào)試說(shuō)明: 1,默認(rèn)使用4000端口,可以在代碼里修改
2,真機(jī)調(diào)試的話,可以先把測(cè)試文件用iTunes傳到這個(gè)APP的用戶文檔里。再啟動(dòng)程序,電腦輸入手機(jī)ip+端口訪問(wèn) 3,模擬器調(diào)試的話,文件可以直接拷到這個(gè)程序的用戶文檔里(路徑在控制臺(tái)中有打印)。電腦輸入localhost+端口訪問(wèn) 4,目前這個(gè)只能說(shuō)是一個(gè)只讀U盤(pán),有興趣的可以自行加上文件上傳和刪除功能。
源碼下載:WirelessStorage.zip
但這兩種方式都略顯不便,所以市面上出現(xiàn)了無(wú)線U盤(pán)這類的APP。原理很簡(jiǎn)單,就是軟件打開(kāi)后會(huì)啟動(dòng)HTTP服務(wù)器,這時(shí)電腦端使用瀏覽器輸入 手機(jī)的ip,就可以通過(guò)web頁(yè)面的形式訪問(wèn)到這個(gè)軟件的用戶文檔。同時(shí)在這個(gè)web頁(yè)面里,直接可以進(jìn)行文件的上傳,下載,刪除等操作。?
下面演示如何開(kāi)發(fā)一個(gè)無(wú)線U盤(pán),實(shí)現(xiàn)功能如下: 1,程序啟動(dòng)后會(huì)啟動(dòng)Web服務(wù),并監(jiān)聽(tīng)設(shè)置的端口,等待請(qǐng)求 2,電腦瀏覽器輸入手機(jī)ip+端口,在web頁(yè)上會(huì)列出用戶文檔里所有文件 3,點(diǎn)擊文件,即可下載
效果圖如下:
詳細(xì)步驟: 1,這里用到了Swift Taylor(一個(gè)用Swift編寫(xiě)HTTP服務(wù)器的開(kāi)發(fā)包)。先把Taylor整個(gè)包引入到項(xiàng)目。
2,添加個(gè)頭文件bridge.h,并添加到編譯參數(shù)里(Taylor內(nèi)部又使用了一個(gè)叫CocoaAsyncSocket的socket庫(kù),使用Objective-C寫(xiě)的)
| 1 | #import "GCDAsyncSocket.h" |
3,頁(yè)面代碼?ViewController.swift
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | import UIKit import AssetsLibrary class ViewController: UIViewController { ????//文件操作類 ????var manager:NSFileManager! ????//保存用戶文檔目錄 ????var docPath:NSURL! ????? ????override func viewDidLoad() { ????????super.viewDidLoad() ????????// Do any additional setup after loading the view, typically from a nib. ????????? ????????//設(shè)置用戶文檔路徑 ????????manager = NSFileManager.defaultManager() ????????let urlsForDocDirectory = manager.URLsForDirectory( ????????????NSSearchPathDirectory.DocumentDirectory, ????????????inDomains:NSSearchPathDomainMask.UserDomainMask) ????????docPath = urlsForDocDirectory[0] as! NSURL ????????? ????????//設(shè)置Web服務(wù)器 ????????let server = Server() ????????dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), { ????????????() -> Void in ????????????? ????????????server.addPostRequestHandler(Middleware.requestLogger(println)) ????????????? ????????????//首頁(yè)請(qǐng)求 ????????????server.get("/") { ????????????????request, response, callback in ????????????????? ????????????????self.createIndexHtml() ????????????????let file = self.docPath.URLByAppendingPathComponent("index.html") ????????????????let data = self.manager.contentsAtPath(file.path!) ????????????????response.body = data ????????????????callback(.Send(request, response)) ????????????} ????????????? ????????????//文件請(qǐng)求 ????????????server.get("/file") { ????????????????request, response, callback in ????????????????? ????????????????println(request.arguments) ????????????????var fileName = request.arguments["fileName"] ????????????????let file = self.docPath.URLByAppendingPathComponent(fileName!) ????????????????let data = self.manager.contentsAtPath(file.path!) ????????????????response.body = data ????????????????callback(.Send(request, response)) ????????????} ????????????? ????????????//啟動(dòng)并監(jiān)聽(tīng)服務(wù)器 ????????????server.startListening(port: 4000, forever: true) { ????????????????result in ????????????????switch result { ????????????????case .Success: ????????????????????println("Up and running") ????????????????case .Error(let e): ????????????????????println("Server start failed \(e)") ????????????????} ????????????} ????????})??????? ????} ????? ????//加載用戶文檔下的文件,并生成index.html首頁(yè) ????func createIndexHtml()->Void{ ????????var content = "<html><meta charset=\"utf-8\"><body>" ????????let contentsOfPath = manager.contentsOfDirectoryAtPath(docPath.path!, error: nil) ????????for child in contentsOfPath!{ ????????????content = content + "<a target='_blank' href='/file?fileName=\(child)'>\(child)</a><br/>" ????????} ????????content = content + "</body></html>" ????????createFile("index.html", fileBaseUrl: docPath, content:content) ????} ????? ????//創(chuàng)建文件 ????func createFile(name:String,fileBaseUrl:NSURL,content:String){ ????????var error:NSErrorPointer = nil ????????let file = fileBaseUrl.URLByAppendingPathComponent(name) ????????println("文件: \(file)") ????????let exist = manager.fileExistsAtPath(file.path!) ????????if !exist { ????????????var error:NSErrorPointer = nil ????????????manager.removeItemAtPath(file.path!, error:error) ????????} ????????? ????????let data = content.dataUsingEncoding(NSUTF8StringEncoding, ????????????allowLossyConversion: true) ????????let createSuccess = manager.createFileAtPath(file.path!,contents:data, ????????????attributes:nil) ????????println("文件創(chuàng)建結(jié)果: \(createSuccess)") ????} ????? ????override func didReceiveMemoryWarning() { ????????super.didReceiveMemoryWarning() ????????// Dispose of any resources that can be recreated. ????} } |
調(diào)試說(shuō)明: 1,默認(rèn)使用4000端口,可以在代碼里修改
2,真機(jī)調(diào)試的話,可以先把測(cè)試文件用iTunes傳到這個(gè)APP的用戶文檔里。再啟動(dòng)程序,電腦輸入手機(jī)ip+端口訪問(wèn) 3,模擬器調(diào)試的話,文件可以直接拷到這個(gè)程序的用戶文檔里(路徑在控制臺(tái)中有打印)。電腦輸入localhost+端口訪問(wèn) 4,目前這個(gè)只能說(shuō)是一個(gè)只讀U盤(pán),有興趣的可以自行加上文件上傳和刪除功能。
源碼下載:WirelessStorage.zip
總結(jié)
以上是生活随笔為你收集整理的Swift - 做一个简单的无线U盘(手机端Http服务器搭建)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Centos7下安装Docker1.8
- 下一篇: 第 十 七 天 : 安 装 php 遇