5

alamofire を使用して PDF ファイルをダウンロードしています。基本的に動作しますが、複数回ダウンロードしてもiOSがファイルを上書きしないようです。次のエラーが表示されます。

Optional(Error Domain=NSCocoaErrorDomain Code=516 "The operation could not be completed. (Cocoa error 516.)" UserInfo=0x1740feb80 {NSSourceFilePathErrorKey=/private/var/mobile/Containers/Data/Application/B2674ABD-95F1-42AF- 9F79-FE21F2929E14/tmp/CFNetworkDownload_1b6ZK8.tmp、NSUserStringVariant=(移動)、NSDestinationFilePath=/var/mobile/Containers/Data/Application/B2674ABD-95F1-42AF-9F79-FE21F2929E14/Documents/November 2014.pdf、NSFilePath=/private /var/mobile/Containers/Data/Application/B2674ABD-95F1-42AF-9F79-FE21F2929E14/tmp/CFNetworkDownload_1b6ZK8.tmp, NSUnderlyingError=0x17405fb00 "操作を完了できませんでした。ファイルが存在します"})

alamofire にファイルを上書きするように指示するにはどうすればよいですか? 私のコード:

var fileName = ""
var filePath = ""

Alamofire.manager.download(Router.listToPdf(), destination: { (temporaryURL, response) -> (NSURL) in

    if let directoryURL = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0] as? NSURL {
        fileName = response.suggestedFilename!
        finalPath = directoryURL.URLByAppendingPathComponent(fileName!)
        return finalPath!
    }

    return temporaryURL

    }).response { (_, _, data, err) -> Void in

}
4

2 に答える 2

19

return-ingの前finalPathに、 を使用して、そのパスにある既存のファイルを確認して削除しますNSFileManager

if NSFileManager.defaultManager().fileExistsAtPath(finalPath) {
    NSFileManager.defaultManager().removeItemAtPath(finalPath, error: nil)
}

Swift 3 ではこんな感じ

if FileManager.default.fileExists(atPath: finalPath.path) {

do{
    try FileManager.default.removeItem(atPath: finalPath.path)
  }catch{
     print("Handle Exception")
  }
}

finalPath は URL タイプです。

于 2014-12-05T08:22:08.427 に答える
7

クロージャーでは、次のようDownloadFileDestinationに設定できます。removePreviousFile

let destination: DownloadRequest.DownloadFileDestination = { _, _ in
    let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
    let fileURL = documentsURL.appendingPathComponent("pig.png")

    return (fileURL, [.removePreviousFile, .createIntermediateDirectories])
}

Alamofire.download(urlString, to: destination).response { response in
print(response)

    if response.error == nil, let imagePath = response.destinationURL?.path {
        let image = UIImage(contentsOfFile: imagePath)
    }
}

ソース: https://github.com/Alamofire/Alamofire#download-file-destination

于 2017-05-23T23:25:10.317 に答える