如何在 Swift (tvOS) 中通过 smb 下载文件

问题描述 投票:0回答:1

如何在 Swift (tvOS) 中通过 smb 下载文件? NetFS 和 Cooca 不适用于 tvOS,当我使用 URLSession dataTask

smb://xxx.xxx.xxx.xx/share/test.txt
Swift 告诉我 smb 不是有效的 url。

有什么解决方案可以通过 smb 下载 tvOS 的文件吗?

用这段代码尝试过:

let url = self.smbManager.getFullUrl(fileName: self.file.name)
let request: NSURLRequest = NSURLRequest(url: url!)
let session = URLSession.shared
session.dataTask(with: request as URLRequest) { data, response, error in
    print(data)
}.resume()

错误是:

finished with error [-1002] Error Domain=NSURLErrorDomain
 Code=-1002
 "unsupported URL"
 UserInfo={NSLocalizedDescription=unsupported
   URL,
   NSErrorFailingURLStringKey=smb://xxx.xxx.xxx.xx/share/test.txt,
   NSErrorFailingURLKey=smb://xxx.xxx.xxx.xx/share/test.txt,
   _NSURLErrorRelatedURLSessionTaskErrorKey=(
     "LocalDataTask <B386A17C-A4A9-4C99-A70E-7E0C739712D3>.<1>"
   ),
   _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask
     <B386A17C-A4A9-4C99-A70E-7E0C739712D3>.<1>,
     NSUnderlyingError=0x2813a7c60 {
       Error Domain=kCFErrorDomainCFNetwork Code=-1002 "(null)"
     }
 }

谢谢。

swift networking tvos smb
1个回答
0
投票

中小企业解决方案:

let url = NSURL(string: "smb://xxx.xxx.xxx.xx/share/test.txt")
let request: NSURLRequest = NSURLRequest(URL: url!)
let session = NSURLSession.sharedSession()   
session.dataTaskWithRequest(request) { (data, response, error) -> Void in                                  print("Response")    
let reply = NSString(data: data!, encoding: NSUTF8StringEncoding) 

print(reply)
    
}

URLSession
的设计目的是使网络传输尽可能简单,一个很好的例子就是它的 downloadTask() 方法。这会获取您指定的 URL 的内容,将其保存到本地文件,然后调用完成处理程序,以便您可以操作该文件 – 全部都在一个过程中。

为了演示这一点,这里有一些将源代码下载到 apple.com 主页的代码:

let url = URL(string: "https://www.apple.com")!

let task = URLSession.shared.downloadTask(with: url) { localURL, urlResponse, error in
    if let localURL = localURL {
        if let string = try? String(contentsOf: localURL) {
            print(string)
        }
    }
}

task.resume()

其中有一些重要的事情需要注意:

  1. 您的完成处理程序将使用本地 URL 进行调用,这是数据在本地保存的位置。这是可选的,因此您需要小心地打开它。
  2. 如果出现问题 – 例如如果网络出现故障 – 那么你会 向您传递一个错误,解释发生了什么。
  3. 创建下载任务后,您应该调用
    resume()
    让它发生。
  4. 您无需担心将下载任务存储在某处 当它发生时 – 它被共享的
    URLSession
    跟踪 代表您。
© www.soinside.com 2019 - 2024. All rights reserved.