首页 > 其他分享 >swift icloud 存储文件

swift icloud 存储文件

时间:2023-12-29 13:55:43浏览次数:36  
标签:文件 存储 url debugPrint destinationPath let icloud error swift

 

import UIKit
///文件下载
class VehicleDownloadFilemanager: NSObject, UIDocumentPickerDelegate {

    /// 创建单例对象
    static let share = VehicleDownloadFilemanager()
    private override init() {}
    
     func downloadFile(fileUrl:String?) {
     
        guard let urlStr = fileUrl, let taskUrl = URL(string: urlStr) else { return }
        debugPrint("文件下载url:\(taskUrl)")
        let request = URLRequest(url: taskUrl)
        let session = URLSession(configuration: .default)
        session.downloadTask(with: request) { [weak self] tempUrl, response, error in
            guard let self = self, let tempUrl = tempUrl, error == nil else {
                debugPrint("文件下载失败")
                UIApplication.shared.topViewController?.view.showErrInfo(at: "文件下载失败")
                
                return
            }
            debugPrint("文件下载完成\(tempUrl)")
            // 下载完成之后会自动删除temp中的文件,把文件移动到document中。
            let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
            debugPrint("文件下载完成 documentsDirectory \(documentsDirectory)")
            // 建议使用的文件名,一般跟服务器端的文件名一致
            let destinationPath = documentsDirectory.appendingPathComponent(response?.suggestedFilename ?? "")
            // 如果存在同名的
            if FileManager.default.fileExists(atPath: destinationPath.path) {
                do {
                    try FileManager.default.removeItem(atPath: destinationPath.path)
                } catch _ {
                    
                }
            }
            debugPrint("文件下载 document下的可保存的url:\(destinationPath)")
            do {
                // 文件移动至document
                try FileManager.default.copyItem(atPath: tempUrl.path, toPath: destinationPath.path)
                // main
                DispatchQueue.main.async {
                    self.saveFileToPhone(url: destinationPath)
                }
            } catch let error {
                debugPrint(error)
//                SWToast.showText(message: "\(error.localizedDescription)")
                UIApplication.shared.topViewController?.view.showErrInfo(at: "\(error.localizedDescription)")
            }
        }.resume()
    }

    func saveFileToPhone(url: URL) {
        
        let picker = UIDocumentPickerViewController(url: url, in: .exportToService)
        picker.delegate = self
        picker.modalPresentationStyle = .formSheet
        UIApplication.shared.topViewController?.present(picker, animated: true)
    }

    func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {
        // 保存成功
//        SWToast.showText(message: "保存成功")
        UIApplication.shared.topViewController?.view.showSuccessInfo(at:"保存成功")
    }

    func documentPickerWasCancelled(_ controller: UIDocumentPickerViewController) {
    //        SWToast.showText(message: "PickerWasCancelled")
    }

}

 

标签:文件,存储,url,debugPrint,destinationPath,let,icloud,error,swift
From: https://www.cnblogs.com/qingzZ/p/17934716.html

相关文章

  • SwiftUI 中Webview与JS交互
    iOS中WKWebview原生与网页端JS交互常用的方法是首先在webview中注入标定好的方法名,例如标定一个request方法letconfig=WKWebViewConfiguration()letuserContent=WKUserContentController();  vardealMessage=DealMessage()userContent.add(dealMessage,name:......
  • python 数据存储,写入
    '''以下是同一个功能的代码段落,但是所耗时间却是天差地别'''st=time.time()#字典格式共耗时40sdsd={}#forkey,valueinfile_h.items():#ifvalueinhash_values:#dsd[value]=dsd.get(value,[])+[key]#......
  • Postgresql中PL/pgSQL的游标、自定义函数、存储过程的使用
    场景Postgresql中PL/pgSQL代码块的语法与使用-声明与赋值、IF语句、CASE语句、循环语句:Postgresql中PL/pgSQL代码块的语法与使用-声明与赋值、IF语句、CASE语句、循环语句上面讲了基本语法,下面记录游标、自定义函数、存储过程的使用。注:博客:霸道流氓气质_C#,架构之路,SpringBoot实......
  • ceph应用-RBD、radosgw对象存储、cephfs
    块存储(RBD)用于K8S、openstack、linux中直接挂载。类似使用iscsi块存储一样。块存储使用案例#1.创建存储池#语法:cephosdpoolcreate<存储池名><PG>[<PGP>][{replicated|erasure}]# PG:指定存储池的pg数量# PGP:指定存储池pgp数量,一般与pg相同。不填写默认就是和PG......
  • 视频监控存储平台EasyCVR车载监控JT/T 808协议接入及场景应用
    JT/T808协议的全称是《道路运输车辆卫星定位系统终端通讯协议及数据格式》,也称为部标808协议,适用于GPS定位车载终端和监控平台之间的通信。本标准规定了道路运输车辆卫星定位系统车载终端与监管/监控平台之间的通信协议与数据格式,包括协议基础、通信连接、消息处理、协议分类与要......
  • 韩国国民搜索 NAVER:为 AI 平台引入存储方案 JuiceFS
    NAVER是一家多元化的互联网公司,拥有韩国最大的搜索引擎并在人工智能、自动驾驶等高科技领域积极投入。在搭建AI平台时,NAVER评估了公有云平台的存储产品、Alluxio以及高性能专用存储产品等多种选项后,最终决定采用JuiceFS。通过使用JuiceFS,NAVER成功地将内部存储资源升级为......
  • 11-MySQL 存储引擎
    MySQL存储引擎可以理解为,MySQL的“文件系统”,(插件形式存在)只不过功能更加强大。mysql提供的存储引擎有InnoDB、MyISAM等TokuDB是第三方的存储引擎moardb,数据压缩比打,写入数据快,如果你的应用是读多写少的情况强烈建议使用此存储引擎innodb存储引擎的功能一、查看存储引擎1......
  • 浪潮信息集中式存储与仪电云i-stack云操作系统软件完成澎湃技术认证
    近日,仪电云i-stack云操作系统软件与浪潮信息集中式存储AS/HF系列产品完成并通过浪潮信息澎湃技术相互兼容性测试认证,测试结果显示,仪电云i-stack云操作系统软件与浪潮信息集中式存储AS/HF系列产品完全兼容,满足功能需求,系统运行可靠稳定,性能表现优异。浪潮信息澎湃技术认证是浪潮信息......
  • 开源免费的对象存储Minio
    简介: Minio是一个基于ApacheLicensev2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合存储大容量、非结构化的数据。例如,图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小的,从几KB到5TB不等。什么是Minio?Mini......
  • 开源对象存储Minio部署篇
    简介: MinIO是一个基于ApacheLicensev2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。(摘自minio中文站点https://docs.m......