Swift-从服务器上特定文件夹/远程URL抓取所有文件

时间:2018-08-29 05:06:17

标签: swift url server nsurlsession remote-server

我正在尝试访问远程URL中的特定文件夹,例如http://dev.servertest.com/sessions/id/video

从那里,我要从文件夹中获取所有视频并将其下载到设备。

我知道如何将视频从远程URL下载到目录中,但无法解决从特定视频文件夹中获取所有视频的问题。

此外,服务器可能会根据用户使用自己的服务器而有所不同,但其余结构应为相同的“ / sessions / id / video”

下面是我用来从应用目录中的特定文件夹“ ImportVideos”上载的代码,如果有帮助的话。

func loadVideos(){


    let fm = FileManager.default
    let dirPaths = fm.urls(for: .documentDirectory, in: .userDomainMask)
    let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0];

    do {
        let videoList = try fm.contentsOfDirectory(atPath: "\(documentsPath + "/ImportVideo")")

        for filename in videoList {
            videoSubtitles.append(filename) //this is used to populate my tableview
        }
    } catch let error {
        print("error: \(error.localizedDescription)")
    }
}

如果有人可以指出正确的方向,那将是很好的。谢谢。

1 个答案:

答案 0 :(得分:3)

HTTP协议不提供任何获取目录中文件列表的方法。如果没有清单-您要下载的文件列表,通常无法做到。

最简单的方法是在服务器上运行脚本,例如

#!/bin/sh
FILES_DIR=/path/to/directory/on/server
cd "$FILES_DIR"
ls > allfiles.txt

然后让您的应用获取文件http://example.com/path/to/allfiles.txt,然后按换行符对其进行拆分,并获取每个文件。这种方法还具有以下优点:允许您以后使用脚本处理程序替换该文本文件,该脚本处理程序可以根据需要为不同的客户端提供不同的文件列表,例如,支持您的应用程序的不同版本。

或者,如果您的服务器支持WebDAV,则可以配置启用了WebDAV的目录,并使用WebDAV库来查找目录中的文件。但是,这可能不是一个好主意,因为WebDAV相对复杂并且易于错误配置。

最后,某些Web服务器提供了一种启用“目录列表”的方法,该目录具有指向目录中所有文件的链接的网页。 (从安全的角度来看,许多人会告诉您,这是个坏主意,尽管值得商.。)尽管天生就很脆弱,但有可能解析这样的页面并提取链接。但是,我们强烈建议不要使用这种方法,因为当您更新到新版本的Web服务器软件时,它可能会完全中断。