2014-09-25 119 views
3

我无法确定如何将文件上传到公共存取存储区到云端存储。iOS将文件上传到Google云端存储 - 获取401:“需要登录”

  1. 我已经设置了一个存储桶并将其ACL设置为READ和WRITE以供所有用户使用。
  2. 我已启用Cloud Storage JSON API和Cloud Storage API。
  3. 我为浏览器应用程序创建了一个允许任何引用者的API密钥。

这是我在斯威夫特代码:

private lazy var googleServiceStorage:GTLServiceStorage = { 
    var storage = GTLServiceStorage() 
    storage.APIKey = "AIzaSy**********m8TPCM" 
    storage.additionalHTTPHeaders = ["x-goog-project-id" : "159*******7"] 
    return storage 
    }() 
} 

public func uploadAssetToGoogle(resourcePath: String?) { 
    if let _resourcePath = resourcePath { 
     let fileHandle = NSFileHandle(forReadingAtPath: _resourcePath) 
     let uploadParams = GTLUploadParameters(fileHandle: fileHandle, MIMEType: "video/mov") 
     var storageObject = GTLStorageObject.object() as GTLStorageObject 
     storageObject.name = "12345678" 
     let query = GTLQueryStorage.queryForObjectsInsertWithObject(storageObject, bucket: "my-bucket", uploadParameters: uploadParams) as GTLQuery 
     var ticket = googleServiceStorage.executeQuery(query) { ticket, object, error in 
      if let _error = error { 
       println("Error upload file: \(error.localizedDescription) : \(error.localizedFailureReason)") 
       return 
      } 
      println("Upload succeeded") 
     } 
     ticket.uploadProgressBlock = {ticket, numberOfBytesRead, dataLength in 
      println("Ticket: \(ticket)") 
      NSLog("read %llu from %llu bytes", numberOfBytesRead, dataLength) 
     } 
    } 

当我把这个代码,我得到了在控制台下面的输出:

mediaURL type: (Metatype) - file:///Users/Michael/Library/Developer/CoreSimulator/Devices/5895B7FA-41E7-4958-84FD-2C1043CA7CD7/data/Containers/Data/Application/2DD62539-E364-4BE0-A89C-E0DD2827D74B/tmp/trim.FCE68DAD-0FC6-4E2D-8C92-37055A02DD12.MOV 

Ticket: GTLServiceTicket 0x7feed4860660: {service:<GTLServiceStorage: 0x7feed2cf9d90> devKey:AIzaSyBClcLHWtXzlBHb2VbATA1xIlUO0m8TPCM fetcher:GTMHTTPUploadFetcher 0x7feed4890fb0 (https://www.googleapis.com/upload/rpc?uploadType=resumable&prettyPrint=false) } 

2014-09-25 18:25:23.515 Beta[14917:1971326] read 202 from 29512 bytes 

Error upload file: The operation couldn’t be completed. (Login Required) : Optional("(Login Required)") 

有我丢失的东西,但我无法弄清楚。如果有人能帮助我,它会为我节省更多的头发。

+1

你尝试“gcloud身份验证登录”与您的项目相关联的帐户? – George 2014-09-26 16:19:19

回答

1

对于需要登录错误信息尝试添加新桶许可项目

ENTITY = User, NAME = allUsers, ACCESS = Writer 

请注意:你必须使用Server API keyiOS API key

对于对象的上传,你可以添加GTLStorageObjectAccessControl

GTLStorageObjectAccessControl *objAccessControl = [GTLStorageObjectAccessControl new]; 
objAccessControl.entity = @"allUsers"; 
objAccessControl.email = @"[email protected]"; 
objAccessControl.role = @"OWNER"; 

GTLStorageObject *newObject = [GTLStorageObject object]; 
newObject.name = @"image.png"; 
newObject.acl = @[objAccessControl]; 

比,

GTLQueryStorage *query = [GTLQueryStorage queryForObjectsInsertWithObject:newObject bucket:kBucketName uploadParameters:uploadParameters]; 
相关问题