2014-09-25 8 views
3

공개 액세스 버킷에 클라우드 저장소로 파일을 업로드하는 방법을 파악하는 데 문제가 있습니다.iOS Google Cloud Storage에 파일 업로드 - 401 : '로그인 필요'

  1. 나는 버킷을 설정하고 ACL을 모든 사용자에게 읽기 및 쓰기로 설정했습니다.
  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

답변

1

로그인 필요 오류 메시지에 대해

ENTITY = User, NAME = allUsers, ACCESS = Writer 

주의 사항 새 버킷 권한 항목을 추가하는 시도 : 당신은 객체 업로드를 들어 Server API key하지 iOS 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]; 
,210

보다,

GTLQueryStorage *query = [GTLQueryStorage queryForObjectsInsertWithObject:newObject bucket:kBucketName uploadParameters:uploadParameters]; 
관련 문제