首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用应用程序脚本将图像从谷歌驱动器上传到亚马逊S3

使用应用程序脚本将图像从谷歌驱动器上传到亚马逊S3
EN

Stack Overflow用户
提问于 2018-11-14 10:32:59
回答 1查看 1.7K关注 0票数 6

我正在整合谷歌表单到我们的后端系统。在形式上,我们正在接受谷歌驱动器上的图片。每当提交表单时,我都会尝试将google驱动图像移动到s3。我用它从google驱动器.获取图像

代码语言:javascript
复制
var driveFile = DriveApp.getFileById("imageId"); 

为了将图像上传到S3,我使用了应用程序脚本库S3-for-Google-Apps-Script。文件正在上载到s3,但格式不正确。

上传图像到S3的代码是

代码语言:javascript
复制
var s3 = S3.getInstance(awsAccessKeyId, awsSecretKey);
s3.putObject(bucket, "file name", driveFile.getBlob(), {logRequests:true});

从s3下载后,我无法打开图像。获取错误“它可能被损坏或使用预览无法识别的文件格式.

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2022-05-20 11:50:41

首先执行pip安装boto3 googledrivedownloader请求,然后使用下面提供的代码:

代码语言:javascript
复制
import boto3
from google_drive_downloader import GoogleDriveDownloader as gdd
import os


ACCESS_KEY = 'get-from-aws'
SECRET_KEY = 'get-from-aws'
SESSION_TOKEN = 'not-mandatory'
REGION_NAME = 'ap-southeast-1'
BUCKET = 'dev-media-uploader'


def drive_to_s3_download(drive_url) :
    if "drive.google" not in drive_url:
        return drive_url    #since its not a drive url.

    client = boto3.client(
        's3',
        aws_access_key_id=ACCESS_KEY,
        aws_secret_access_key=SECRET_KEY,
        region_name=REGION_NAME,
        aws_session_token=SESSION_TOKEN  # Optional
    )
    file_id = drive_url.split('/')[5]
    print(file_id)
    gdd.download_file_from_google_drive(file_id=file_id,
                                        dest_path=f'./{file_id}.jpg',
                                        unzip=True)
    client.upload_file(Bucket=BUCKET, Key=f"{file_id}.jpg", Filename=f'./{file_id}.jpg')
    os.remove(f'./{file_id}.jpg')
    return f'https://{BUCKET}.s3.amazonaws.com/{file_id}.jpg'


client = boto3.client(
        's3',
        aws_access_key_id=ACCESS_KEY,
        aws_secret_access_key=SECRET_KEY,
        region_name=REGION_NAME,
        aws_session_token=SESSION_TOKEN  # Optional
    )
# client.download_file(Bucket='test-bucket-drive-to-s3-upload', Key=, Filename=f'./test.jpg')
print(drive_to_s3_download('https://drive.google.com/file/d/1Wlr1PdAv8nX0qt_PWi0SJpx0IYgQDYG6/view?usp=sharing'))

上面的代码将驱动器文件下载到本地,然后上传到S3,然后返回S3 url,任何人都可以根据权限查看哪个文件。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53298109

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档