【问题标题】:Download Sqlite file from Google Drive swift从 Google Drive 快速下载 Sqlite 文件
【发布时间】:2020-07-18 04:41:03
【问题描述】:

我将一个 sqlite 数据库上传到谷歌驱动器。现在我想下载它。所以我尝试将它从 Google Drive 下载到我的 Swift 项目,但它是以 GTLRDataObject 数据格式下载的。如何将文件转换为 sqlite 数据库格式? sqlite 文件来自 Google 驱动器的数据格式。我使用以下内容从谷歌驱动器下载了我的 sqlite 数据库文件。

Global.googleDriveService.executeQuery(GTLRDriveQuery_FilesGet.queryForMedia(withFileId: "\((result as? GTLRDrive_File)?.identifier ?? "")"))
{ (ticket, file, error) in
    guard let data = (file as? GTLRDataObject)?.data else {
        return
    }
    print("Download data: - \(data)")
}

【问题讨论】:

  • 您是否以 sqlite 格式将文件存储在 GD 上?我的意思是你的文件 mimeType 是 "application/x-sqlite3
  • 我使用了 mimeType "db/SQLite"
  • 检查我编辑答案,它的工作代码

标签: ios swift sqlite local-database


【解决方案1】:

如果您这样做是为了备份数据库和恢复数据库文件,那么您需要执行以下操作

  func getAndSaveFileromGoogle() {
    let query = GTLRDriveQuery_FilesList.query()
    query.spaces = "drive"
    self.googleDriveService.executeQuery(query) { (ticket, files, error) in
        if error == nil {
            if let files = files as? GTLRDrive_FileList {
                if let driveFiles = files.files /*?? [GTLRDrive_File]()*/ {
                    if driveFiles.count > 0 {
                        for file in driveFiles {
                            if file.name == "your_filename.sqlite" {
                                print(file.name)
                                print(file.identifier)
                                let downloadQuery = GTLRDriveQuery_FilesGet.queryForMedia(withFileId: file.identifier!)
                                self.googleDriveService.executeQuery(downloadQuery, completionHandler: { (ticket, downloadedFile, error) in
                                    if error == nil {
                                        if let downlaodfile = downloadedFile as? GTLRDataObject {
                                            do {
                                                try downlaodfile.data.write(to: Model.shared.coreDataStoreURL!, options: .atomic)
                                            }
                                            catch {
                                                print(error.localizedDescription)
                                            }
                                        }
                                    }
                                    else {
                                        print("Somethig went wrong")
                                    }
                                })
                            }
                        }
                    }
                    else {
                        
                        print("No back up file found")
                    }
                }
                else {
                    
                    print("No back up file found")
                }
            }
            else {
                
                print("Something went wrong")
            }
        }
        else {
            print("Something went wrong")
        }
    }
}

只需将您的数据库文件替换为新下载的文件。

【讨论】:

  • 好的,谢谢,但你能建议我吗,当我签入新设备并获得文件夹 id 时。但是要下载该文件,我还需要 File id,那么我怎样才能得到这个文件 id?
  • 非常感谢您提出的这个建议,它确实对我有用。但是现在我想问一下我的数据库是否保存在文档目录中。所以下载这个文件后,我想替换那个数据库文件,所以哪个 url 应该需要在下面的代码行中传递:尝试 downlaodfile.data.write(to: Model.shared.coreDataStoreURL!, options: .atomic)
  • 好的,我明白了,你能告诉我你使用的是哪个数据库吗?
  • if driveFiles.count > 0 { 如果没有文件,它无论如何都不会迭代循环
  • 我正在使用 FMDB 使用 Sqlite 数据库。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-10
  • 2013-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-24
  • 2021-09-22
相关资源
最近更新 更多