简体   繁体   中英

How to save an image and its path and then use it later to upload using swift?

I have an app which stores receipts. The way it works is, You save an image using the app and then you upload it to amazon s3 bucket. To upload to amazon s3, you need its local path.

So here is what I'm doing.

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {

    if let image = info[UIImagePickerControllerOriginalImage] as? UIImage {
         receiptImageView.image = image
        Model.sharedModel.currentImage = image
        print(info)
    }
    self.dismiss(animated: true, completion: nil)

    //MAking the localpath of the image
    let imageAWSName = "ios_" + NSUUID().uuidString + ".jpg"
    let image = info[UIImagePickerControllerOriginalImage] as! UIImage
    let documentDirectory = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first!
    let photoURL          = NSURL(fileURLWithPath: documentDirectory)
    let localPath         = photoURL.appendingPathComponent(imageAWSName)
    if !FileManager.default.fileExists(atPath: localPath!.path) {
        do {
            try UIImageJPEGRepresentation(image, 1.0)?.write(to: localPath!)
            Model.sharedModel.currentlocalpath = localPath
            print("file saved")
        }catch {
            print("Error saving receipt photo local path")
        }
    }
    else {
        print("Error - localpath already exists")
    }

The path looks like this -

file:///Users/Al/Library/Developer/CoreSimulator/Devices/FE04FF78-914B-4224-A84B-D10521E0F845/data/Containers/Data/Application/115C6A1B-E61F-4082-AA59-4674D87DF31E/Documents/ios_5AB04F97-32C9-441E-97C8-44D4D2725ADD.jpg

Now this works if upload the receipt straight away to s3 bucket. But if I close the app, and then reload it doesn't work.

I think it's because FE04FF78 gets changed everytime you run the app. If that's the case how do I get the path of the image?

You should only save your file name or any sub-folder under Documents if needed. If you just open the app from your device then it should work fine. However, every time your app compiles (you debug/run the app from Xcode), the UUID, in this case FE04FF78-914B-4224-A84B-D10521E0F845 , will change.

you should only save filename and fetch the document path everytime , whenever you need and append to your filename

Because document path changes every time, whenever a new instance of app launches

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM