Algum tempo atrás precisei aprender a fazer upload de arquivos para o Google Cloud Storage. Uma das coisas que eu gosto de fazer para me ajudar aprender a fazer algo é criar um scriptzinho com o conceito do que quero, sem aplicar em grandes projetos, evitando assim grandes complexidades.
Assim na época eu criei este script simples que faz o upload do arquivo em um bucket do GCS. A primeira coisa que você precisa fazer é ter instalada a biblioteca, para isso temos o bom e velho pip:
pip install --upgrade google-cloud-storage
Depois disso você precisa definir uma variável de ambiente apontando para o arquivo de credenciais do Google Cloud Platform:
export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/service-account-file.json"
Com a biblioteca instalada e a variável definida podemos executar o script abaixo e fazer upload de arquivos:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
| from datetime import timezone, datetime
from typing import BinaryIO
from google.cloud import storage
def upload_file(
data: BinaryIO,
bucket: str,
file_path: str,
link_lifetime: int = 3600
) -> str:
"""
Função que realiza o upload do arquivo
"""
storage_client = storage.Client()
bucket = storage_client.bucket(bucket)
blob = bucket.blob(file_path)
blob.upload_from_file(data) # Faz o upload do arquivo binário e cria um objeto associado ao arquivo
lifetime = int(
datetime.now(tz=timezone.utc).timestamp()
) + link_lifetime
# Gera um link para o arquivo com tempo de expiração
url = blob.generate_signed_url(lifetime)
return
def main():
bucket = 'meu-pequeno-bucket' # Bucket name in GCS
file_name = 'arquivo_legal.pdf' # Filename
with open(file_name, 'rb') as f:
url = upload_file(
data=f,
bucket=bucket,
file_path=file_name,
)
print(f'URL for file: {url}')
if __name__ == "__main__":
main()
|
Esta biblioteca é síncrona e existem alternativas assíncronas bem interessantes e com uma API parecida, mas não igual, vale apena considerar o uso.