在Swift 3中为Google Drive iOS获取基本目录中的文件夹列表?
使用GoogleSignIn和GooglePiclientForrest,我已经能够登录到google,甚至可以使用从网站上获取的代码获得一个文件列表。我真正不懂的是如何按文件类型过滤请求的结果,或者如何获取子文件夹的内容。一点帮助都没有 澄清问题:而在Swift 3中为Google Drive iOS获取基本目录中的文件夹列表?,ios,swift,swift3,google-drive-api,google-signin,Ios,Swift,Swift3,Google Drive Api,Google Signin,使用GoogleSignIn和GooglePiclientForrest,我已经能够登录到google,甚至可以使用从网站上获取的代码获得一个文件列表。我真正不懂的是如何按文件类型过滤请求的结果,或者如何获取子文件夹的内容。一点帮助都没有 澄清问题:而 let query = GTLRDriveQuery_FilesList.query() query.pageSize = 10 service.executeQuery(query,
let query = GTLRDriveQuery_FilesList.query()
query.pageSize = 10
service.executeQuery(query,
delegate: self,
didFinish: #selector(displayResultWithTicket(ticket:finishedWithObject:error:)))
完美配合
func displayResultWithTicket(ticket: GTLRServiceTicket,
finishedWithObject result : GTLRDrive_FileList,
error : NSError?) {
if let error = error {
print(error.localizedDescription)
return
}
var text = "";
if let files = result.files, !files.isEmpty {
text += "Files:\n"
for file in files {
text += "\(file.name!) (\(file.identifier!))\n"
}
} else {
text += "No files found."
}
print(text)
}
,我不知道如何仅获取文件夹或如何获取子文件夹中的文件。对于列出的文件夹,我们希望像这样声明mimeType
let root = "(mimeType = 'application/vnd.google-apps.folder' or mimeType = 'image/jpeg' or mimeType = 'image/png' or mimeType = 'application/pdf' or mimeType = 'application/epub' or mimeType = 'application/msword' or mimeType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document') and '\(root)' in parents and trashed=false"
现在,您可以将此根目录传递给您所需的需求列表
func GoogleDrivelistFiles(root : String) { //root
let query = GTLRDriveQuery_FilesList.query()
query.pageSize = 100
query.q = root
query.fields = "files(id,name,mimeType,modifiedTime,createdTime,fileExtension,size,parents,kind),nextPageToken"
service.executeQuery(query, completionHandler: {(ticket, files, error) in
if let filesList : GTLRDrive_FileList = files as? GTLRDrive_FileList {
var cloudArray = Array<FileObject>()
if let filesShow : [GTLRDrive_File] = filesList.files {
for Array in filesShow {
let name = Array.name
let mimeType = Array.mimeType
let id = Array.identifier
let folder = (mimeType as NSString?)?.pathExtension
let isfolder = true
let parents = Array.parents
var parentPath : String!
for arrayParents in parents! {
parentPath = arrayParents
}
let creationTime = Array.createdTime?.date
let modifiedTime = Array.modifiedTime?.date
let fileSize : Int!
let fileExtension : String!
if isfolder == true {
fileSize = 0
fileExtension = "Folder"
}else {
fileSize = Array.size?.intValue
fileExtension = Array.fileExtension
}
if folder == "folder" {
let content = FileObject(path: mimeType!, isFolder: true, parentPath: parentPath!, fileName: name!, creationDate: creationTime!, lastModified: modifiedTime!, fileSize: fileSize!, fileExtension: fileExtension!, fileId: id!, isSyncing: true)
cloudArray.append(content)
} else {
let content = FileObject(path: mimeType!, isFolder: false, parentPath: parentPath!, fileName: name!, creationDate: creationTime!, lastModified: modifiedTime!, fileSize: fileSize!, fileExtension: fileExtension!, fileId: id!, isSyncing: true)
cloudArray.append(content)
}
}
}
DispatchQueue.main.async {
self.delegate?.DataRefresh(fileObject: cloudArray)
}
}else {
}
})
}
嘿,您可以使用以下功能获取所有文件夹列表:-
func getAllfolders() {
let root = "mimeType = 'application/vnd.google-apps.folder'"
let query = GTLRDriveQuery_FilesList.query()
query.pageSize = 100
query.q = root
query.fields = "files(id,name,mimeType,modifiedTime,createdTime,fileExtension,size),nextPageToken"
service.executeQuery(query, completionHandler: {(ticket, files, error) in
if let filesList : GTLRDrive_FileList = files as? GTLRDrive_FileList {
if let filesShow : [GTLRDrive_File] = filesList.files {
print("files \(filesShow)")
for ArrayList in filesShow {
let name = ArrayList.name ?? ""
let id = ArrayList.identifier ?? ""
print("hello\(name)", id)
}
}
}
})
}
您可以获得所有文件夹列表,包括/不包括废弃文件夹:-
func getAllfolders() {
let root = "mimeType = 'application/vnd.google-apps.folder'" // including trash folder or add and trashed=true
//let root = "mimeType = 'application/vnd.google-apps.folder' and trashed=false" // excluding trash folders
let query = GTLRDriveQuery_FilesList.query()
query.pageSize = 100
query.q = root
query.fields = "files(id,name,mimeType,modifiedTime,createdTime,fileExtension,size),nextPageToken"
service.executeQuery(query, completionHandler: {(ticket, files, error) in
if let filesList : GTLRDrive_FileList = files as? GTLRDrive_FileList {
if let filesShow : [GTLRDrive_File] = filesList.files {
print("files \(filesShow)")
for ArrayList in filesShow {
let name = ArrayList.name ?? ""
let id = ArrayList.identifier ?? ""
print("hello\(name)", id)
}
}
}
})
}
我现在真的很清楚为什么我在这个问题上得到了负面的评价。这是一个有效的问题,标记正确。我没有提供代码补充,因为正如我所说的,我使用的代码来自quickstart。请,如果你要投反对票,至少告诉我为什么,这样我才能对这个社区产生更积极的影响。你找到解决办法了吗。我也被这个困住了@康诺尔24601遗憾的是,我还没有找到任何学习swift中谷歌驱动API的好资源@如果我发现了,我会告诉你的,如果你发现了什么,请告诉我。可悲的是,这篇文章仍然是负面的,而且相当陈旧,所以我怀疑它是否会得到回复。我想答案可能在于在swift中发出http请求,我也不知道。嗨,你找到解决方案了吗。如果需要,请告诉我。我找到了解决办法。:)嘿,我喜欢这个解决方案!如果你能发布一个例子,那将非常有帮助!你能在选择文件夹后给出代码吗?如何获取文件夹中的文件列表?@KrutikaSonawala希望您能理解我所写的内容。:)高兴的coding@KrutikaSonawala你明白我的意思了吗?请告诉评论:)是的,我在考虑文件夹的问题,但列表给出了两者的合并结果。:)感谢您提供第二节代码。这将为我提供
GTLRDrive_文件列表0x281af3f90:{files:[0]}
。虽然我的驱动器中有文件夹。原因可能是什么?
func getAllfolders() {
let root = "mimeType = 'application/vnd.google-apps.folder'" // including trash folder or add and trashed=true
//let root = "mimeType = 'application/vnd.google-apps.folder' and trashed=false" // excluding trash folders
let query = GTLRDriveQuery_FilesList.query()
query.pageSize = 100
query.q = root
query.fields = "files(id,name,mimeType,modifiedTime,createdTime,fileExtension,size),nextPageToken"
service.executeQuery(query, completionHandler: {(ticket, files, error) in
if let filesList : GTLRDrive_FileList = files as? GTLRDrive_FileList {
if let filesShow : [GTLRDrive_File] = filesList.files {
print("files \(filesShow)")
for ArrayList in filesShow {
let name = ArrayList.name ?? ""
let id = ArrayList.identifier ?? ""
print("hello\(name)", id)
}
}
}
})
}