什么云存储服务允许开发者 upload/download 文件免费 API?

What cloud storage service allow developer upload/download files with free API?

我想找一个免费的云存储服务API,可以帮我自动备份一些文件。

我想写一些脚本(例如python)来自动上传文件。

我调查了 OneDrive 和 GoogleDrive。 OneDrive API 不是免费的,GoogleDrive API 是免费的,但在使用前需要人工交互授权 API。

目前我只是使用电子邮件 SMTP 协议将文件作为电子邮件附件发送,但存在最大文件大小限制,随着我的文件大小不断增加,这将在未来失败。

还有其他推荐吗?

我相信你的目标如下。

  • 您想通过服务帐户使用云端硬盘 API 上传文件。
  • 您想使用 python 来实现您的目标。

首先,在你的情况下,使用google-api-python-client怎么样?在这个答案中,我想解释以下流程和使用 google-api-python-client.

的示例脚本

用法:

1。创建服务帐户。

请创建服务帐户并下载 JSON 文件。 Ref

2。安装 google-api-python-client.

为了使用示例脚本,请安装google-api-python-client

$ pip install google-api-python-client

3。准备一个文件夹。

请在您的 Google 驱动器中创建一个新文件夹。并且,请将创建的文件夹与您的服务帐户的电子邮件共享。因为Google你账号的Drive和服务账号的Drive不一样。通过与服务帐户共享文件夹,可以使用服务帐户将文件上传到 Google 驱动器中的文件夹。这样,您就可以通过浏览器在您的 Google 驱动器上看到上传的文件。

4。准备示例脚本。

请将服务帐户凭证的文件名、您要上传的文件的文件名以及您与服务帐户共享文件夹的文件夹 ID 设置为 SERVICE_ACCOUNT、[=分别为 15=] 和 FOLDER_ID

from oauth2client.service_account import ServiceAccountCredentials
from googleapiclient.discovery import build
from googleapiclient.http import MediaFileUpload

SERVICE_ACCOUNT = '###' # Please set the file of your credentials of service account.
UPLOAD_FILE = 'sampleFilename' # Please set the filename with the path you want to upload.
FOLDER_ID = '###' # Please set the folder ID that you shared your folder with the service account.
FILENAME = 'sampleFilename' # You can set the filename of the uploaded file on Google Drive.

SCOPES = ['https://www.googleapis.com/auth/drive']
credentials = ServiceAccountCredentials.from_json_keyfile_name(SERVICE_ACCOUNT, SCOPES)
drive = build('drive', 'v3', credentials=credentials)
metadata = {'name': FILENAME, "parents": [FOLDER_ID]}
file = MediaFileUpload(UPLOAD_FILE, resumable=True)
response = drive.files().create(body=metadata, media_body=file).execute()
fileId = response.get('id')
print(fileId)  # You can see the file ID of the uploaded file.
  • 当您 运行 此脚本时,文件会上传到您 Google 驱动器中的共享文件夹。
  • 当您设置要使用的文件的mimeType时,请将file = MediaFileUpload(UPLOAD_FILE, resumable=True)修改为file = MediaFileUpload(UPLOAD_FILE, mimeType='###', resumable=True)

参考文献:

  1. gdownload.py 使用 Python3

    from apiclient.http import MediaIoBaseDownload
    from apiclient.discovery import build
    from httplib2 import Http
    from oauth2client import file, client, tools
    import io,os
    
    CLIENT_SECRET = 'client_secrets.json'
    SCOPES = ['https://www.googleapis.com/auth/admin.datatransfer','https://www.googleapis.com/auth/drive.appfolder','https://www.googleapis.com/auth/drive']
    
    store = file.Storage('tokenWrite.json')
    creds = store.get()
    if not creds or creds.invalid:
        flow = client.flow_from_clientsecrets(CLIENT_SECRET, SCOPES)
        flags = tools.argparser.parse_args(args=[])
        creds = tools.run_flow(flow, store, flags)
    DRIVE = build('drive', 'v2', http=creds.authorize(Http()))
    
    files = DRIVE.files().list().execute().get('items', [])
    
    def download_file(filename,file_id):
        #request = DRIVE.files().get(fileId=file_id)
        request = DRIVE.files().get_media(fileId=file_id)
        fh = io.BytesIO()
        downloader = MediaIoBaseDownload(fh, request,chunksize=-1)
        done = False
        while done is False:
            status, done = downloader.next_chunk()
            print("Download %d%%." % int(status.progress() * 100))
        fh.seek(0)
        f=open(filename,'wb')
        f.write(fh.read())
        f.close()
    
    rinput = vars(__builtins__).get('raw_input',input)
    fname=rinput('enter file name: ')
    for f in files:
     if f['title'].encode('utf-8')==fname:
      print('downloading...',f['title'])
      download_file(f['title'],f['id'])
    os._exit(0)