我正在整合谷歌表单到我们的后端系统。在形式上,我们正在接受谷歌驱动器上的图片。每当提交表单时,我都会尝试将google驱动图像移动到s3。我用它从google驱动器.获取图像
var driveFile = DriveApp.getFileById("imageId"); 为了将图像上传到S3,我使用了应用程序脚本库S3-for-Google-Apps-Script。文件正在上载到s3,但格式不正确。
上传图像到S3的代码是
var s3 = S3.getInstance(awsAccessKeyId, awsSecretKey);
s3.putObject(bucket, "file name", driveFile.getBlob(), {logRequests:true});从s3下载后,我无法打开图像。获取错误“它可能被损坏或使用预览无法识别的文件格式.”
提前谢谢。
发布于 2022-05-20 11:50:41
首先执行pip安装boto3 googledrivedownloader请求,然后使用下面提供的代码:
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,任何人都可以根据权限查看哪个文件。
https://stackoverflow.com/questions/53298109
复制相似问题