2016-02-10 102 views
2

我正在使用NSURLSession下載文件。一些網站(如亞馬遜)不使用URL中的文件名(例如:http://server/file.php?id=22)。我怎樣才能得到這些文件名?從NSURLSession下載獲取文件名

實例URL,而不名稱:https://odesk-prod-att.s3.amazonaws.com/...oCtjM%3D

我使用這樣的功能:

func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didFinishDownloadingToURL location: NSURL) { 
    print("Download finished: \(location.absoluteString)") 
} 

// Download finished: file:///.../CFNetworkDownload_UTywas.tmp 

回答

1

終於找到了那半解。現在我正在檢測文件的MIME並根據MIME類型重命名它。

是: 「abcd.tmp」 新:創建自己之前所建議的文件名 「your_prefix.png」

func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didFinishDownloadingToURL location: NSURL) { 
    guard let mimeType = downloadTask.response?.MIMEType, 
     let fileExtension = mimeTypeToExtension(mimeType) else { 
     return 
    } 

    // Your file name is: "prefixYouWant.\(fileExtension)" 
} 

/// Converting MIME Type to extension (e.g.: jpg) 
func mimeTypeToExtension(mimeType: String) -> String? { 
    let uti = UTTypeCreatePreferredIdentifierForTag(kUTTagClassMIMEType, mimeType, nil) 
    guard let fileUTI = uti?.takeRetainedValue(), 
     let fileExtension = UTTypeCopyPreferredTagWithClass(fileUTI, kUTTagClassFilenameExtension) else { return nil } 

    let extensionString = String(fileExtension.takeRetainedValue()) 
    return extensionString 
} 
3

檢查:

downloadTask.response?.suggestedFilename