public async Task <OperationResult> SetReadPolicy(string key, ReadAccess access) { try { Bucket bucket = await _client.GetBucketAsync(key); PredefinedBucketAcl bacl = access == ReadAccess.Public ? PredefinedBucketAcl.PublicRead : PredefinedBucketAcl.Private; PredefinedObjectAcl oacl = access == ReadAccess.Public ? PredefinedObjectAcl.PublicRead : PredefinedObjectAcl.Private; _client.UpdateBucket(bucket, new UpdateBucketOptions() { PredefinedAcl = bacl, PredefinedDefaultObjectAcl = oacl }); var buckets = _client.ListObjects(key).ReadPage(Int32.MaxValue / 2); IEnumerable <Task> tasks = buckets.Select(s => _client.UpdateObjectAsync(s, new UpdateObjectOptions() { PredefinedAcl = oacl })); await Task.WhenAll(tasks); return(new OperationResult(true, "", HttpStatusCode.OK)); } catch (GoogleApiException e) { return(new OperationResult(false, e.Message, (HttpStatusCode)e.Error.Code)); } }
public override async Task <string> SaveAsync(FileSetOptions fileSetOptions) { GoogleCredential credential = await AuthorizedAsync(fileSetOptions); StorageClient storageClinet = await StorageClient.CreateAsync(credential); PredefinedObjectAcl predefinedObjectAcl = PredefinedObjectAcl.ProjectPrivate; PredefinedBucketAcl predefinedBucketAcl = PredefinedBucketAcl.ProjectPrivate; switch (fileSetOptions.FileAccess) { case FileAccessLevel._private: predefinedObjectAcl = PredefinedObjectAcl.AuthenticatedRead; predefinedBucketAcl = PredefinedBucketAcl.AuthenticatedRead; break; case FileAccessLevel._public: predefinedObjectAcl = PredefinedObjectAcl.PublicRead; predefinedBucketAcl = PredefinedBucketAcl.PublicRead; break; } if (fileSetOptions.folderOptions == FolderOptions.CreateIfNull) { var folder = await storageClinet.GetBucketAsync(fileSetOptions.Folder); if (folder == null) { await storageClinet.CreateBucketAsync(fileSetOptions.ProjectId, fileSetOptions.Folder, new CreateBucketOptions() { PredefinedAcl = predefinedBucketAcl, PredefinedDefaultObjectAcl = predefinedObjectAcl }); } } fileSetOptions._stream.Position = 0; await storageClinet.UploadObjectAsync(fileSetOptions.Folder, fileSetOptions.Key, fileSetOptions.ContentType, fileSetOptions._stream, new UploadObjectOptions() { PredefinedAcl = predefinedObjectAcl }); return(fileSetOptions.Key); }