Сохранить изображение в каталоге файлов - PullRequest
0 голосов
/ 06 февраля 2019

Я пытаюсь сохранить изображения, используя каталог файлов, но не могу без ошибки сказать:

Нет такой папки.

Вот мой код, яне знаю, где я иду не так

// Write image to directory
func writeImageToPath(_ path: String, image: UIImage) {
    print("Write image to directory")

    // get the documents directory url
    let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]

    let folderURL = documentsURL.appendingPathComponent("upload")

    if !FileManager.default.fileExists(atPath: folderURL.path) {
        do {
            try FileManager.default.createDirectory(atPath: folderURL.path, withIntermediateDirectories: true, attributes: nil)
        }
        catch {}
    }

    let fileURL = folderURL.appendingPathComponent(path)
    let data = UIImageJPEGRepresentation(image, 0.9)
    do {
        try data!.write(to: fileURL)
    }
    catch {}

}

// load image from directory
func loadImageFromPath(_ path: String) -> UIImage? {

    let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]

    let folderURL = documentsURL.appendingPathComponent("upload")

    let fileURL = folderURL.appendingPathComponent(path)

    if FileManager.default.fileExists(atPath: fileURL.path) {
        //Get Image And upload in server
        print("fileURL.path \(fileURL.path)")

        do{
            let data = try Data.init(contentsOf: fileURL)
            let image = UIImage(data: data)
            return image
        }catch{
            print("error getting image")
        }
    } else {
        print("No image in directory")
    }

    return nil
}

Как правильно сохранить и загрузить изображения из каталога?

Ответы [ 3 ]

0 голосов
/ 06 февраля 2019

Swift 4.2

func saveAndGetImageFromDirectory(_ data: Data, name: String, completionHandler: @escaping (URL?)->()) {
        let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
        var imageURL:URL!

        imageURL = documentsURL.appendingPathComponent(name)

        do {
            try data.write(to: imageURL)

            var documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
            documentsPath = documentsPath + "/\(name)"
            completionHandler(URL.init(fileURLWithPath: documentsPath))
        } catch let error {
            print(error)
        }
    }

0 голосов
/ 06 февраля 2019
Swift 4:
try this code maybe it will helps you.
//saving image in directory and
            let fileManager = FileManager.default
            //get the image path
            let imagePath = (NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as NSString).appendingPathComponent(imageName)
            //get the image we took from gallery
            let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage
            //get the PNG data for this image
            let data = image!.pngData()
            //store it in the document directory
            fileManager.createFile(atPath: imagePath as String, contents: data, attributes: nil)
0 голосов
/ 06 февраля 2019

Косуля,

Я следовал приведенному ниже фрагменту кода в большинстве проектов:

Чтобы сохранить изображение в папке, используйте следующую функцию:

func addImageInFolder(image : UIImage,filename:String){
    let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
    let folderURL = documentsURL.appendingPathComponent("upload")
    if !FileManager.default.fileExists(atPath: folderURL.path) {
        do {
            try FileManager.default.createDirectory(atPath: folderURL.path, withIntermediateDirectories: true, attributes: nil)
        }
        catch {}
    }
    let fileURL = folderURL.appendingPathComponent(filename)
    let data = UIImageJPEGRepresentation(image, 0.9)
    do {
        try data!.write(to: fileURL)
    }
    catch {}
}

Используйте функцию ниже, чтобы удалить изображение из сохраненной папки:

let fileURL = documentsURL.appendingPathComponent("upload/\(filename ?? "")")

            if FileManager.default.fileExists(atPath: fileURL.absoluteString){
                do{
                    try FileManager.default.removeItem(at: fileURL)
                }catch{
                    print("\(sigStr ?? "") delete file delete error")
                }

            }

Чтобы получить изображение из папки:

let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
                //TODO: -Get dateTime For get image URL-
                let fileURL = documentsURL.appendingPathComponent("upload/\(fileName)")
                if FileManager.default.fileExists(atPath: fileURL.path) {
                    //Get Image And upload in server
                    print("fileURL.path \(fileURL.path)")

                    do{
                        let data = try Data.init(contentsOf: fileURL)
                        imageView.image = UIImage(data: data)
                    }catch{

                    }
                }
...