Swift - GCDWebServer使用详解3(文件传输、WebDav服务器实现)
一、实现文件的上传下载服务
GCDWebUploader 是 GCDWebServer 的子类,它提供了一个现成的 HTML5 形式的文件上传下载器。GCDWebUploader 自带 UI 界面,让用户可以在浏览器里上传,下载,删除文件,以及在 iOS 应用的沙盒中创建目录文件夹。
1,安装配置
(1)除了之前提到的 GCDWebServer,我们还需要把 GCDWebUploader 这个子文件夹添加到我们项目中来。#import "GCDWebServer.h" #import "GCDWebServerDataResponse.h" #import "GCDWebUploader.h"
2,样例代码
在我们程序启动的时候会自动运行个 HTTP 服务,端口 8080。用户访问这个地址时,会显示一个进行文件管理的页面。import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() //默认上传目录是App的用户文档目录 let documentsPath = NSHomeDirectory() + "/Documents" let webUploader = GCDWebUploader(uploadDirectory: documentsPath) webUploader.start(withPort: 8080, bonjourName: "Web Based Uploads") print("服务启动成功,使用你的浏览器访问:\(webUploader.serverURL)") } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } }
3,效果图
我这里使用模拟器运行程序,然后使用电脑浏览器访问 http://localhost:8080 就可以看到效果了。在这里我们可以进行文件的上传、下载、重命名、删除,以及文件夹的创建、删除、重命名等操作。二、实现一个WebDAV服务器
前面我们通过 GCDWebUploader 来实现一个基于 HTTP 的文件服务器,用户通过浏览器可以进行文件的上传下载等操作。这次我们通过 GCDWebServer 来实现一个 WebDAV 服务器,让用户可以使用任意的 WebDAV 客户端,比如: Transmit (Mac),ForkLift (Mac) 或者 CyberDuck (Mac / Windows),来访问我们 App 的沙盒目录文件。
1,安装配置
(1)首先我们需要在:Target > Build Phases > Link Binary With Libraries 中添加动态库 libxml2
(2)在 Target > Build Settings > HEADER_SEARCH_PATHS 中把 $(SDKROOT)/usr/include/libxml2 添加到 header search paths
(3)除了 GCDWebServer,我们还需要把 GCDWebDAVServer 这个子文件夹添加到我们项目中来。
(4)同时将 GCDWebDAVServer.h 添加到桥接头文件中来。
#import "GCDWebServer.h" #import "GCDWebServerDataResponse.h" #import "GCDWebUploader.h" #import "GCDWebDAVServer.h"
2,样例代码
当我们程序启动的时候会自动运行个 WebDAV 服务,端口 8080。import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() //默认上传目录是App的用户文档目录 let documentsPath = NSHomeDirectory() + "/Documents" let webDAVServer = GCDWebDAVServer(uploadDirectory: documentsPath) webDAVServer.start(withPort: 8080, bonjourName: "WebDAV Server") print("服务启动成功,使用你的WebDAV客户端访问:\(webDAVServer.serverURL)") } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } }源码下载: hangge_1562.zip
3,效果图
我这里使用模拟器运行程序,然后使用 WebDAV 客户端 Transmit 进行连接。连接成功后,可以看到这个 App 的 Documents 目录下的所有文件,并可以进行相关操作。
如果是 Windows 系统,可以使用 Cyberduck 这个客户端工具进行连接操作。
完整的源码能提供一份吗?GCDWebDAVServer.h加进去就编译不过了~~
恩,试了下Cyberduck的确没问题,之前下的另一个软件也是和直连一样的问题,怀疑是GCD库针对Windows这块处理不对,Cyberduck可能作了异常处理。另外最近在做网上邻居,用的samba协议,目前需要将smb转换成http协议,不知道航哥有研究过。
建立dav服务后,使用win的文件管理器可以直接查看,但是貌似只是只读的,不能拷贝文件进去,但是mac的可以,不过mac会生成多余文件。站长知道什么原因吗?
航哥可以写写服务器 swift perfect server的文章😄😄