2017-08-09 117 views
2

我使用谷歌驅動器SDK創建文件夾,但無法創建。我能夠登錄並獲取所有文件和文件夾,但無法創建它。如何使用swift在谷歌驅動器中創建文件夾和文件

我使用的快捷,使用此代碼

let metaData = GTLRDrive_File() 
    metaData.name = "xyz" 
    metaData.mimeType = "application/vnd.google-apps.folder" 
    let querys = GTLRDriveQuery_FilesCreate.query(withObject: metaData, uploadParameters: nil) 

    querys.fields = "id" 

    //service.executeQuery(querys, delegate: self, didFinish: nil) 

    self.service.executeQuery(querys) { (ticket:GTLRServiceTicket, object:Any?, error:Error?) in 
     // Put your completion code here 
    } 

但無法創建文件夾。誰能幫我嗎。提前致謝。

回答

2
func chilkatTest() { 
     var success: Bool = true 

    // It requires the Chilkat API to have been previously unlocked. 
    // See Global Unlock Sample for sample code. 

    // This example uses a previously obtained access token having permission for the 
    // Google Drive scope. 

    let gAuth = CkoAuthGoogle() 
    gAuth.AccessToken = "GOOGLE-DRIVE-ACCESS-TOKEN" 

    let rest = CkoRest() 

    // Connect using TLS. 
    var bAutoReconnect: Bool = true 
    success = rest.Connect("www.googleapis.com", port: 443, tls: true, autoReconnect: bAutoReconnect) 

    // Provide the authentication credentials (i.e. the access token) 
    rest.SetAuthGoogle(gAuth) 

    // ------------------------------------------------------------------------- 
    // A multipart upload to Google Drive needs a multipart/related Content-Type 
    rest.AddHeader("Content-Type", value: "multipart/related") 

    // Specify each part of the request. 

    // The 1st part is JSON with information about the file. 
    rest.PartSelector = "1" 
    rest.AddHeader("Content-Type", value: "application/json; charset=UTF-8") 

    let json = CkoJsonObject() 
    json.AppendString("name", value: "testHello.txt") 
    json.AppendString("description", value: "A simple file that says Hello World.") 
    json.AppendString("mimeType", value: "text/plain") 

    // To place the file in a folder, we must add a parents[] array to the JSON 
    // and list the folder id's. It's possible for a file to be in multiple folders at once 
    // if it has more than one parent. If no parents are specified, then the file is created 
    // in the My Drive folder. 
    // Note: We'll assume we already have the id if the folder. It is the id's that are specified here, 
    // not the folder names. 
    var parents: CkoJsonArray? = json.AppendArray("parents") 
    var folderId: String? = "0B53Q6OSTWYolY2tPU1BnYW02T2c" 
    parents!.AddStringAt(-1, value: folderId) 
    parents = nil 

    rest.SetMultipartBodyString(json.Emit()) 

    // The 2nd part is the file content, which will contain "Hello World!" 
    rest.PartSelector = "2" 
    rest.AddHeader("Content-Type", value: "text/plain") 

    var fileContents: String? = "Hello World!" 
    rest.SetMultipartBodyString(fileContents) 

    var jsonResponse: String? = rest.FullRequestMultipart("POST", uriPath: "/upload/drive/v3/files?uploadType=multipart") 
    if rest.LastMethodSuccess != true { 
     print("\(rest.LastErrorText)") 
     return 
    } 

    // A successful response will have a status code equal to 200. 
    if rest.ResponseStatusCode.integerValue != 200 { 
     print("response status code = \(rest.ResponseStatusCode.integerValue)") 
     print("response status text = \(rest.ResponseStatusText)") 
     print("response header: \(rest.ResponseHeader)") 
     print("response JSON: \(jsonResponse!)") 
     return 
    } 

    // Show the JSON response. 
    json.Load(jsonResponse) 

    // Show the full JSON response. 
    json.EmitCompact = false 
    print("\(json.Emit())") 

    // A successful response looks like this: 
    // { 
// "kind": "drive#file", 
    // "id": "0B53Q6OSTWYoldmJ0Z3ZqT2x5MFk", 
    // "name": "Untitled", 
    // "mimeType": "text/plain" 
    // } 

    // Get the fileId: 
    print("fileId: \(json.StringOf("id"))") 

} 

鏈接庫需要: - Download libraries

包括CkoAuthGoogle,CkoRest和CkoJsonObject頭文件在您的項目。

+0

感謝您的回覆是什麼CkoAuthGoogle,以及如何訪問的accessToken –

+0

CkoAuthGoogle - 提供使用服務帳戶驗證對Google Cloud Platform API和Google Apps API的調用的功能,以及 訪問令牌 - 用於Google API請求的訪問令牌。該屬性在成功調用ObtainAccessToken時設置。 我希望這個解決方案能幫助你! – amish

+0

如何下載CkoAuthGoogle lib –

0

它基本上是由於範圍,我得給kGTLRAuthScopeDriveFile範圍區域

private let scopes = [kGTLRAuthScopeDriveReadonly,kGTLRAuthScopeDriveFile] 

和護目鏡休息同樣

func folder(){ 

    let metadata = GTLRDrive_File() 
    metadata.name = "eBilling" 

    metadata.mimeType = "application/vnd.google-apps.folder" 
    let querys = GTLRDriveQuery_FilesCreate.query(withObject: metadata, uploadParameters: nil) 
    querys.fields = "id" 

    self.service.executeQuery(querys, completionHandler: {(ticket:GTLRServiceTicket, object:Any?, error:Error?) in 

     if error == nil { 

      self.listFiles() 

     } 
     else { 
      print("An error occurred: \(error)") 
     } 
    }) 




} 
相關問題