iOS将文件上传到Google Cloud Storage-获取401:“需要登录" [英] iOS Upload file to Google Cloud Storage - getting 401: 'Login Required'

查看:64
本文介绍了iOS将文件上传到Google Cloud Storage-获取401:“需要登录"的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在弄清楚如何将文件上传到公共访问存储桶到Cloud Storage时遇到麻烦.

I am having trouble figuring out how to upload a file to a Public Access bucket to Cloud Storage.

  1. 我已经设置了存储桶,并将所有用户的ACL设置为READ和WRITE.
  2. 我已启用Cloud Storage JSON API和Cloud Storage API.
  3. 我为浏览器应用程序创建了一个API密钥,该密钥允许任何引荐来源网址.

这是我在Swift中的代码:

Here is my code in Swift:

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)
      }
  }

调用此代码时,我将在控制台中获得以下输出:

When I call this code I get the following output in the console:

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)")

我缺少一些东西,但是我无法弄清楚.如果有人可以帮助我,它将为我节省很多头发.

There is something I am missing, but I can't figure it out. If anyone can help me, it will save me a lot more hair.

推荐答案

对于需要登录错误消息,尝试添加新的存储桶权限项

For Login Required error message try with adding new bucket permission item

ENTITY = User, NAME = allUsers, ACCESS = Writer

请注意:您必须使用Server API key而不是iOS API key

对于对象上传,您可以添加GTLStorageObjectAccessControl

For object upload, you can add GTLStorageObjectAccessControl

GTLStorageObjectAccessControl *objAccessControl = [GTLStorageObjectAccessControl new];
objAccessControl.entity = @"allUsers";
objAccessControl.email = @"xxxxxx-xxxxx@developer.gserviceaccount.com";
objAccessControl.role = @"OWNER";

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

GTLQueryStorage *query = [GTLQueryStorage queryForObjectsInsertWithObject:newObject bucket:kBucketName uploadParameters:uploadParameters];

这篇关于iOS将文件上传到Google Cloud Storage-获取401:“需要登录"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆