-
[Google Api] 구글 드라이브에 올라가있는 파일 업데이트하기programming 공부/Python 2022. 1. 23. 21:35
# -*- coding: utf-8 -*- import os.path import hashlib from google.auth.transport.requests import Request from google.oauth2.credentials import Credentials from google_auth_oauthlib.flow import InstalledAppFlow from googleapiclient.discovery import build from googleapiclient.errors import HttpError from googleapiclient.http import MediaFileUpload def updateFile(filePath, fileName, fileId): """ Google Drive에 위치한 특정 파일을 업데이트 합니다. update를하면 해당 파일의 revision 이 추가됩니다. :param filePath: 로컬에 파일이 위치한 폴더 경로 :param fileName: 파일 이름(확장자 포함) :param fileId: 업데이트 하려고 하는 파일의 Google fileId :return: 업로드 완료된 파일의 google file id """ SCOPES = ['https://www.googleapis.com/auth/drive'] creds = None if os.path.exists('token.json'): creds = Credentials.from_authorized_user_file('token.json', SCOPES) # If there are no (valid) credentials available, let the user log in. if not creds or not creds.valid: if creds and creds.expired and creds.refresh_token: creds.refresh(Request()) else: flow = InstalledAppFlow.from_client_secrets_file( 'credentials.json', SCOPES) creds = flow.run_local_server(port=0) # Save the credentials for the next run with open('token.json', 'w') as token: token.write(creds.to_json()) try: service = build('drive', 'v3', credentials=creds) md5Checksum = service.files().get(fileId=fileId, fields='md5Checksum').execute() # 구글 드라이브에 업로드되어있는 파일의 md5Checksum with open(name,'rb') as f: checksum = hashlib.md5(f.read()).hexdigest() # 업로드 하려고 하는 파일의 md5Checksum if checksum == md5Checksum['md5Checksum'] : # 구글 드라이브의 파일과 현재 업로드하려는 파일이 동일한경우 False를 리턴함 return False metadata = {'name':(fileName), 'mimeType':'*/*'} media = MediaFileUpload(os.path.join(filePath,fileName),mimetype= '*/*',resumable=True) res = service.files().update(body=metadata,fileId=fileId, media_body=media, fields='id').execute() if res: print('"%s" 업로드 성공' %fileName) return True except HttpError as error: print(f'An error occurred: {error}')
구글 드라이브에 이미 업로드된 파일을 최신버전으로 교체하고 싶은 경우에 위와 같이 할 수 있다.
동일한 파일을 수정해서 직접 구글 드라이브에 업로드 하면 새로운 버전(revision)이 생성되는데, 위와 같이 하면 동일하게 만들 수 있다.
똑같은 파일을 불필요하게 업로드하는 경우를 방지하기 위해서 md5Checksum 을 활용하여 동일한 파일인경우 업로드 되지 않도록 만들었다.
'programming 공부 > Python' 카테고리의 다른 글
[Python] 파이썬 딕셔너리의 저장 순서는? (0) 2022.01.25 [Google Api] 구글 드라이브에서 파일 다운로드 하기 (0) 2022.01.24 [Google Api] 특정 구글 드라이브 폴더에 파일 업로드하기 (0) 2022.01.23 [Python] 다른 프로세스의 window title 가져오기 (0) 2021.08.18 [Python] 파이썬으로 batch 파일을 다른 창으로 실행하기 (0) 2021.08.18