首页 > 解决方案 > 将本地文件上传到 Google Drive 后如何删除?

问题描述

我需要一个 python 函数将文件上传到 Google Drive,然后从文件系统中删除它。尝试使用以下代码时,尝试删除文件时出现错误:

def upload():
    file_metadata = {
        'name': 'thankyou.jpg',
        'mimeType': 'image/jpeg'}
    media = MediaFileUpload('thankyou.jpg')
    myfile = drive_service.files().create(body=file_metadata, media_body=media, fields='id').execute()
    os.remove('thankyou.jpg')

上传成功完成,但上传后无法在本地删除文件。我得到的错误是:

PermissionError: [WinError 32] The process cannot access the file 
because it is being used by another process: 'thankyou.jpg'

我应该怎么做才能删除文件?

标签: python

解决方案


我自己在 Windows 10 中遇到了这个问题,最后想出了这个解决方案:将用于存储 MediaFileUpload 对象的变量设置为 None:

    media = MediaFileUpload(folder+file.name, resumable=True)
logging.info("{} - {} {}MB uploading...".format(datetime.datetime.now().strftime("%H:%M:%S"), file.name, file_size))
try:
    service.files().create(body=file_metadata, media_body=media, fields='id').execute()
    logging.info(datetime.datetime.now().strftime("%H:%M:%S")+" - "+file.name+" uploaded")
    media = None
except Exception as err:
    logging.warning(datetime.datetime.now().strftime("%H:%M:%S")+" - "+file.name+" failed to upload:\nType: {}".format(type(err)))

try:
    os.remove(folder+file.name)
    logging.info(datetime.datetime.now().strftime("%H:%M:%S")+" - "+file.name+" deleted.")
except PermissionError as err:
    logging.error("{} - Failed to delete local file. Looks like a permision error: {}".format(datetime.datetime.now().strftime("%H:%M:%S"), err))
except Exception as err:
    logging.warning("{} - Failed to delete local file: {}".format(datetime.datetime.now().strftime("%H:%M:%S"), err))

推荐阅读