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 UIKitimport AssetsLibraryclass 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相比,估计在实 ...
随机推荐
- 【QT相关】Image Viewer Example
结合QLable和QScrollArea显示一个图片. QLable典型用于用户展示文本,但是也能展示图片.QScrollArea提供了一个滚动视图,如果子控件超过了框架限制,QScrollArea自 ...
- javascript学习(10)——[知识储备]链式调用
上次我们简单的说了下单例的用法,这个也是在我们java中比较常见的设计模式. 今天简单说下链式调用,可能有很多人并没有听过链式调用,但是其实只要我简单的说下的话,你肯定基本上都在用,大家熟知的jQue ...
- 微信红包API接口(PHP)
根据微信高级红包接口,开发PHP版本的API接口,现在进行主要代码分析. 红包接口调用请求代码,所有请求参数为必填参数与文档对应: class Wxapi { private $app_id = 'w ...
- Android 四种启动模式 已看晕
http://blog.csdn.net/zdw890412/article/details/7386314 //有点乱 http://www.cnblogs.com/fanchangfa/arch ...
- Android studio多个项目之间怎么实现快速切换?
Android studio多个项目之间怎么实现快速切换?Android studio中打开的项目太多了,想切换到一个项目很麻烦,怎么才能快速切换到另一个项目中呢?请看下文详细介绍 在对Android ...
- Clojure学习01:开始起步
我们先要了解下什么是Clojure,我们从它的特性来了解: 1.首先它是一门编程语言,并且它写的程序是运行在jvm上的,同java语言一样. 2.Clojure代码可以使用任意java类库,反之jav ...
- 关于 Oracle外键列上是否需要索引问题?
外键列上缺少索引会带来两个问题,限制并发性.影响性能.而这两个问题中的任意一个都可能会造成严重性能问题. 无论是Oracle的官方文档,还是在Tom的书中都说明了两种情况下可以忽略外键上的索引.其 ...
- Kafka介绍
本文介绍LinkedIn开源的Kafka,久仰大名了,依照其官方文档做些翻译和二次创作.相应能够查看整份官方文档. 基本术语 topics,维护的消息源种类(更像是业务上的数据种类/分类) produ ...
- c++,operator=
operator=为什么值得注意? 从语法上讲,下面的程序可以编译通过,我在另一篇笔记示例里面也这样用了. class A1 { public: int operator=(int a)//参数是in ...
- 自己用js写的两个日历控件
前一阵写了两个日历控件,做了简单的封装,发出来共朋友们参考. 第一个日历控件,条状的日历. (使用方法:调用initBarTime(id,evn),第一个参数是要渲染div的id,第二个参数是点击日期 ...