Swift - 做一个简单的无线U盘(手机端Http服务器搭建)
手机的ip,就可以通过web页面的形式访问到这个软件的用户文档。同时在这个web页面里,直接可以进行文件的上传,下载,删除等操作。


1
|
# import "GCDAsyncSocket.h" |
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. //设置用户文档路径 manager = NSFileManager .defaultManager() let urlsForDocDirectory = manager. URLsForDirectory ( NSSearchPathDirectory . DocumentDirectory , inDomains: NSSearchPathDomainMask . UserDomainMask ) docPath = urlsForDocDirectory[0] as ! NSURL //设置Web服务器 let server = Server () dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_BACKGROUND , 0), { () -> Void in server.addPostRequestHandler( Middleware .requestLogger( println )) //首页请求 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)) } //文件请求 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)) } //启动并监听服务器 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首页 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) } //创建文件 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 ( "文件创建结果: \(createSuccess)" ) } override func didReceiveMemoryWarning() { super .didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } } |
调试说明:

Swift - 做一个简单的无线U盘(手机端Http服务器搭建)的更多相关文章
- C#做一个简单的进行串口通信的上位机
C#做一个简单的进行串口通信的上位机 1.上位机与下位机 上位机相当于一个软件系统,可以用于接收数据.控制数据.即可以对接收到的数据直接发送操控命令来操作数据.上位机可以接收下位机的信号.下位机是 ...
- 【Bugly干货分享】一起用 HTML5 Canvas 做一个简单又骚气的粒子引擎
Bugly 技术干货系列内容主要涉及移动开发方向,是由Bugly邀请腾讯内部各位技术大咖,通过日常工作经验的总结以及感悟撰写而成,内容均属原创,转载请标明出处. 前言 好吧,说是“粒子引擎”还是大言不 ...
- 使用React并做一个简单的to-do-list
1. 前言 说到React,我从一年之前就开始试着了解并且看了相关的入门教程,而且还买过一本<React:引领未来的用户界面开发框架 >拜读.React的轻量组件化的思想及其virtual ...
- 【 D3.js 入门系列 --- 3 】 做一个简单的图表!
前面说了几节,都是对文字进行处理,这一节中将用 D3.js 做一个简单的柱形图. 做柱形图有很多种方法,比如用 HTML 的 div 标签,或用 svg . 推荐用 SVG 来做各种图形.SVG 意为 ...
- 一起用HTML5 canvas做一个简单又骚气的粒子引擎
前言 好吧,说是"粒子引擎"还是大言不惭而标题党了,离真正的粒子引擎还有点远.废话少说,先看demo 本文将教会你做一个简单的canvas粒子制造器(下称引擎). 世界观 这个简单 ...
- Jmeter初步使用二--使用jmeter做一个简单的性能测试
经过上一次的初步使用,我们懂得了Jmeter的安装与初步使用的方法.现在,我们使用Jmeter做一个简单的性能测试.该次测试,提交的参数不做参数化处理,Jmeter各元件使用将在介绍在下一博文开始介绍 ...
- 用EF DataBase First做一个简单的MVC3报名页面
使用EF DataBase First做一个简单的MVC3报名网站 ORM(Object Relational Mapping)是面向对象语言中的一种数据访问技术,在ASP.NET中,可以通过ADO. ...
- 【 D3.js 入门系列 — 3 】 做一个简单的图表!
图1. 柱形图 1. 柱形图 前几章的例子,都是对文字进行处理.本章中将用 D3 做一个简单的柱形图.制作柱形图有很多种方法,比如用 HTML 的 <div> 标签,或在 SVG 上绘制 ...
- Windows Phone开发(21):做一个简单的绘图板
原文:Windows Phone开发(21):做一个简单的绘图板 其实我们今天要说的就是一个控件--InkPresenter,这个控件并不是十分强大,没办法和WPF中的InkCanvas相比,估计在实 ...
随机推荐
- levelDB跳表实现
跳表的原理就是利用随机性建立索引,加速搜索,并且简化代码实现难度.具体的跳表原理不再赘述,主要是看了levelDB有一些实现细节的东西,凸显自己写的实现不足之处. 去除冗余的key template& ...
- ulipad双击无反应
所有的东西都配好后,执行ulipad需要注意的是: 1,必须以管理员身份运行ulipad. 2,当运行有道词典的时候,双击ulipad是没有反应, 至于为什么会出现这种情况,我也不太清除,等我查到 原 ...
- UVa 121 - Pipe Fitters
称号:放置在一个圆中的矩形,它要求每个圆的每行或列是切线,问:多少能竖起来. 分析:计算几何.数论.首先计算矩形显示屏,然后计算互显示器(每一行与相邻行相同差1个月)求最大,你可以. 说明:╮(╯▽╰ ...
- Android内存泄漏简介
前言 不少人认为JAVA程序,因为有垃圾回收机制,应该没有内存泄露. 其实如果我们一个程序中,已经不再使用某个对象,但是因为仍然有引用指向它,垃圾回收器就无法回收它,当然该对象占用的内存就无法被使用, ...
- USG 2210
- 面向对象(类,实例变量,方法定义,方法重载,构造方法,this,string类)
面向对象 类是由属性和方法组成 类是所有创建对象的模板 实例变量有默认值 实例变量至少在本类范围中有效 实例变量与局部变量冲突时,局部变量优先 类中方法定义类似于函数定义 修饰符 返回值类型 方法名( ...
- QtSoap调用Web Service(QtSoap是非官方应用)
今天学习如何用QtSoap访问Web Service服务.这里调用的是查询QQ在线状态的服务qqOnlineWebService.调用的几个步骤: 1.创建QtSoapMessage对象 messag ...
- UVALive 6931 Can't stop playing (Regionals 2014 >> Europe - Central)
题目 一开始有一个双头队列,每次添加一个数(这是数是二的幂,所有数的和不大于\(2^13\)),由你来决定添加到队头还是队尾.如果队列里面相邻的两个数相同,设它们都是\(x\),那么这两个数会合并为\ ...
- 浙江大学PAT上机题解析之3-04. 一元多项式的乘法与加法运算
设计函数分别求两个一元多项式的乘积与和. 输入格式说明: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数).数字间以空格分 ...
- BNU Box of Bricks
http://www.bnuoj.com/bnuoj/problem_show.php?pid=1596 这个题一开始以为要求最少移动次数,把我吓到了,原来只要求最少移动几个方块就行了..这一下就变简 ...