当前位置: > > > Swift - GCDWebServer使用详解3(文件传输、WebDav服务器实现)

Swift - GCDWebServer使用详解3(文件传输、WebDav服务器实现)

一、实现文件的上传下载服务

GCDWebUploader GCDWebServer 的子类,它提供了一个现成的 HTML5 形式的文件上传下载器。GCDWebUploader 自带 UI 界面,让用户可以在浏览器里上传,下载,删除文件,以及在 iOS 应用的沙盒中创建目录文件夹。

1,安装配置

(1)除了之前提到的 GCDWebServer,我们还需要把 GCDWebUploader 这个子文件夹添加到我们项目中来。

(2)同时将 GCDWebUploader.h 添加到桥接头文件中来。
#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 这个客户端工具进行连接操作。
评论4
  • 4楼
    2018-09-12 00:42
    我是haoren

    完整的源码能提供一份吗?GCDWebDAVServer.h加进去就编译不过了~~

    站长回复

    我把源码提交了,你可以再看看。

  • 3楼
    2017-12-06 16:52
    Core

    恩,试了下Cyberduck的确没问题,之前下的另一个软件也是和直连一样的问题,怀疑是GCD库针对Windows这块处理不对,Cyberduck可能作了异常处理。另外最近在做网上邻居,用的samba协议,目前需要将smb转换成http协议,不知道航哥有研究过。

    站长回复

    smb转换成http协议这个我还真没研究过,暂时帮不了你了。

  • 2楼
    2017-11-02 18:22
    Core

    建立dav服务后,使用win的文件管理器可以直接查看,但是貌似只是只读的,不能拷贝文件进去,但是mac的可以,不过mac会生成多余文件。站长知道什么原因吗?

    站长回复

    直连确实有这样那样的问题,我都是用工具连的(Mac使用Transmit,Windows使用Cyberduck)。读取保存都是没问题,也不会生成多余的文件。

    不过我想既然用工具没问题,系统直连就有问题,那问题应该出在系统设置这边,具体哪里就不清楚了。

  • 1楼
    2017-03-20 11:19
    火麒麟

    航哥可以写写服务器 swift perfect server的文章😄😄

    站长回复

    Perfect我还没研究过,后面如果什么研究结果的话我会写篇文章分享给大家。