how to use writeToFile to save image in document directory?

The problem there is that you are checking if the folder not exists but you should check if the file exists. Another issue in your code is that you need to use url.path instead of url.absoluteString. You are also saving a jpeg image using a “png” file extension. You should use “jpg”.

edit/update:

Swift 4.2 or later

do {
    // get the documents directory url
    let documentsDirectory = try FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
    print("documentsDirectory:", documentsDirectory.path)
    // choose a name for your image
    let fileName = "image.jpg"
    // create the destination file url to save your image
    let fileURL = documentsDirectory.appendingPathComponent(fileName)
    // get your UIImage jpeg data representation and check if the destination file url already exists
    if let data = image.jpegData(compressionQuality:  1),
        !FileManager.default.fileExists(atPath: fileURL.path) {
        // writes the image data to disk
        try data.write(to: fileURL)
        print("file saved")
    }
} catch {
    print("error:", error)
}

To write the image at the destination regardless if the image already exists or not you can use .atomic options, if you would like to avoid overwriting an existing image you can use withoutOverwriting instead:

try data.write(to: fileURL, options: [.atomic])

Leave a Comment