서버간 파일을 공유하는 간단한 방법 google cloud storage

김재영·2020년 7월 9일
1

TIL

목록 보기
1/2
post-thumbnail

google api 를 쓰면 python 에서 바로 클라우드 저장소에 파일을 업로드 할 수 있었다. google cloud storage 들어가면 잘 성명되어 있다. 아래는 내가 쓰면서 정리한 내용인데 참고하시면 될거 같다.

0. 구글 클라우드 플랫폼 접속, 프로젝트 생성

1. Cloud Storage Client Libraries 접속

- 서비스 키 생성, 로컬에 저장
- 환경변수 등록(굳이 안해도 상관없음)

2. 라이브러리 인스톨

$pip install google-cloud-storage

3. 파이썬 실행(python3 버전만 지원하는걸로 알고 있음)

4. FTP 저장소로 쓸 bucket 만들어주기

# Imports the Google Cloud client library
from google.cloud import storage

# Instantiates a client

# 환경변수 등록시
#storage_client = storage.Client()

# 환경변수 등록 x  '시크릿키' 는 1번단계에서 생성됨
#storage_client = storage.Client.from_service_account_json(
        'YOUR_SECRET_KEY_DIR')
        
# The name for the new bucket 
# 파일 공유할 저장소 이름을 설정해 주면됩니다.
bucket_name = "my-new-bucket"

# Creates the new bucket
bucket = storage_client.create_bucket(bucket_name)

print("Bucket {} created.".format(bucket.name))

5. 버킷에 공유할 파일 업로드 하기

from google.cloud import storage

def upload_to_bucket(blob_name, path_to_file, bucket_name):
    """ Upload data to a bucket(아까 만들었던 저장소)"""

    # Explicitly use service account credentials by specifying the private key
    # file.

    storage_client = storage.Client.from_service_account_json(
        'YOUR_SECRET_KEY_DIR')
    #print(buckets = list(storage_client.list_buckets())

    bucket = storage_client.get_bucket(bucket_name)
    blob = bucket.blob(blob_name)
    blob.upload_from_filename(path_to_file)
    
    #접근권한 public 으로 설정
    blob.make_public()
    
    #파일 url 만들어주기
    url = blob.public_url
    #returns a public url
    return url
#parameter순서대로 공유된 파일이름, 로컬저장된파일 경로, 저장소 이름 
url =upload_to_bucket("blob_name","path_to_file","bucket_name")
print(url)

6. 버킷에 공유한 파일 다른 서버에서 다운로드 하기

def download_blob(bucket_name, source_blob_name, destination_file_name):
    """Downloads a blob from the bucket."""
    # bucket_name = "your-bucket-name"
    # source_blob_name = "storage-object-name"
    # destination_file_name = "local/path/to/file"

    storage_client = storage.Client()

    bucket = storage_client.bucket(bucket_name)
    blob = bucket.blob(source_blob_name)
    blob.download_to_filename(destination_file_name)

    print(
        "Blob {} downloaded to {}.".format(
            source_blob_name, destination_file_name
        )
    )

0개의 댓글