Swift - 做一个简单的无线U盘(手机端Http服务器搭建)
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服务器搭建)相关推荐
- 做一个简单网页(做一个简单网页多少钱)
怎样做一个简易的网页?做一个简单网页多少钱 做一个简易的普通网页比较容易.当然,制作的方法有好几种,有的是直接写代码.有的是用绘图软件绘制页面再导出网页.常用的是使用网页制作软件做网页.下面以普通静态 ...
- 做一个简单的“远程”开关 ESP8266 + APP
简单的远程开关制作(纯代码.无解析版.UDP通信) 引言 本篇文章,我们将做一个超级简单的开关,当你学会该操作后,就可以自己进行一些简单的添加.修改从而实现一些自定义的功能.你可以做一个简单的远程开关 ...
- C#做一个简单的进行串口通信的上位机
C#做一个简单的进行串口通信的上位机 乱世中的单纯 发布于 1年前,共有 10 条评论 1.上位机与下位机 上位机相当于一个软件系统,可以用于接收数据.控制数据.即可以对接收到的数据直接发送操控命令来 ...
- JSP+Mysql 做一个简单的学生成绩查询web系统
IDEA基于JSP+Mysql 做一个简单的学生成绩查询web系统 目录 一.相关软件的下载和配置环境 Java环境的下载和配置 (1)IDEA的下载和安装 (2)JdK的安装 Tomcat的下载 ...
- CocosCreator学习1:做一个简单的游戏
把计步器写好了,到了写游戏场景.控件什么的时候,傻眼了.想做一个简单的地图,可以在地图上点击选择城市,发现用Cocos2D-X代码码出来好麻烦,尤其是城市位置问题,需要调试去找对像素区域做一个按钮控制 ...
- pygame做一个简单的打字游戏
pygame做一个简单的打字游戏 1.基本代码 下面的代码完成了每一秒在界面的顶部随机生成一个新的字母 # -*- coding=utf-8 -*- import pygame from pygame ...
- 第四章 .net core做一个简单的登录
项目目标部署环境:CentOS 7+ 项目技术点:.netcore2.0 + Autofac +webAPI + NHibernate5.1 + mysql5.6 + nginx 开源地址:https ...
- clistctrl控件最后插入在后面_用图表控件做一个简单的员工信息查询系统
前几天在上课的时候有同学说在做人员的信息查询的时候,经常的要去做查找搜索很麻烦,能不能做一个简单的人员信息查询系统,只需要选择人员的编号就可以查询到这个员工的信息.其实要实现这个同学的需求在EXCEL ...
- 程序猿修仙之路--数据结构之你是否真的懂数组? c#socket TCP同步网络通信 用lambda表达式树替代反射 ASP.NET MVC如何做一个简单的非法登录拦截...
程序猿修仙之路--数据结构之你是否真的懂数组? 数据结构 但凡IT江湖侠士,算法与数据结构为必修之课.早有前辈已经明确指出:程序=算法+数据结构 .要想在之后的江湖历练中通关,数据结构必不可少.数据 ...
最新文章
- ubuntu 使用root用户登录
- 安装cuda 非root_linux非root用户下安装软件,搭建生产环境
- python常用字符串方法调用语法_Python3常用的字符串方法
- Typora图片上传和加载问题解决方案
- 老司机请注意:POS机可盗刷ETC联名卡
- tomcat与mysql分离部署_apache+tomcat+mysql 实现动静分离
- java严格模式_es严格模式、对象和扩展。
- 字节码指令之对象的创建与访问指令
- 芯烨网口小票打印机,使用PHP打印小票
- ThingJS摄像机总结
- Adam Harley的卷积神经网络3D视觉化模型
- 粉屏门又一次显示出了苹果的傲慢
- buctoj周赛(5)逃离(三分+思维)
- Python爬虫实战,QQ音乐爬取全部歌曲
- Dev-C++ win10中文乱码
- shell wc命令
- 2021年第十二届蓝桥杯A组省赛
- Python学习记录——Python容器:列表、元组、字典与集合(1)
- java 打印 日历 详细 注解_java 打印日历
- 中国移动java面试_中国移动软件工程师面试经验