Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon s3 如何将png文件上载到S3 Bucket?_Amazon S3_Google Apps Script_Urlfetch - Fatal编程技术网

Amazon s3 如何将png文件上载到S3 Bucket?

Amazon s3 如何将png文件上载到S3 Bucket?,amazon-s3,google-apps-script,urlfetch,Amazon S3,Google Apps Script,Urlfetch,正在尝试使用库将png文件上载到S3存储桶: // get the image blob const imgBlob = UrlFetchApp.fetch('imageUrl').getBlob(); // init S3 instance const s3 = S3.getInstance(awsAccessKeyId, awsSecretKey); // upload the image to S3 bucket s3.putObject(bucketName, 'test.png',

正在尝试使用库将png文件上载到S3存储桶:

// get the image blob
const imgBlob = UrlFetchApp.fetch('imageUrl').getBlob();

// init S3 instance
const s3 = S3.getInstance(awsAccessKeyId, awsSecretKey);

// upload the image to S3 bucket
s3.putObject(bucketName, 'test.png', imgBlob, { logRequests:true });
该文件正在上载到S3,但不是以完美的方式!看起来是这样的:

如果我下载图像并打开获取错误:

它可能已损坏或使用预览无法识别的文件格式

那么,如何将.png文件上载到AmazonS3存储桶

当将“base64”用于s3.putObject时,我可以正确上载图像:


但这是作为字符串上传的,例如,当我转到S3并单击test.png时,我会看到如下内容:ivborw0kggoaaansuheugaaaaaaai。。。II=,但我想看到的是真实的图像,而不是字符串。

我相信您的情况和目标如下

在您的情况下,可以上载图像的base64数据。但是,上传的数据不是图像。这是字符串数据。 在您的目标中,您希望使用图像URL上载公共共享图像的图像文件。 对于这个问题,这个答案如何

问题和解决方法: 当我看到S3forGoogleApps脚本的脚本时,似乎URL不能直接用于S3.putObject。并且,使用getDataAsString将输入的blob转换为字符串类型。我想这就是你的问题所在

在这个答案中,我想建议修改S3forGoogleApps脚本的GasLibrary,以便使用字节数组进行有效负载

用法: 首先,请复制的天然气项目,请修改如下

修改脚本: 关于S3.gs文件中的S3.prototype.putObject,请修改如下

发件人: 致: 关于S3Request.gs文件中的S3Request.prototype.setContent,请修改如下

发件人: 致: 关于S3Request.gs文件中的S3Request.prototype.getContentMd5,请修改如下

发件人: 致: 示例脚本: 对于上面修改的脚本,请测试下面的脚本

const imageUrl = "###";  // Please set the image URL.
const s3 = S3.getInstance(awsAccessKeyId, awsSecretKey);  // Please set them.

const imageBlob = UrlFetchApp.fetch(imageUrl).getBlob();
s3.putObject(bucketName, 'test.png', imageBlob, { logRequests:true });
这样,您的令牌可以由修改后的库创建并使用它。 当我检查时,我认为字节数组可能可以使用。 参考资料:
我相信你的情况和目标如下

在您的情况下,可以上载图像的base64数据。但是,上传的数据不是图像。这是字符串数据。 在您的目标中,您希望使用图像URL上载公共共享图像的图像文件。 对于这个问题,这个答案如何

问题和解决方法: 当我看到S3forGoogleApps脚本的脚本时,似乎URL不能直接用于S3.putObject。并且,使用getDataAsString将输入的blob转换为字符串类型。我想这就是你的问题所在

在这个答案中,我想建议修改S3forGoogleApps脚本的GasLibrary,以便使用字节数组进行有效负载

用法: 首先,请复制的天然气项目,请修改如下

修改脚本: 关于S3.gs文件中的S3.prototype.putObject,请修改如下

发件人: 致: 关于S3Request.gs文件中的S3Request.prototype.setContent,请修改如下

发件人: 致: 关于S3Request.gs文件中的S3Request.prototype.getContentMd5,请修改如下

发件人: 致: 示例脚本: 对于上面修改的脚本,请测试下面的脚本

const imageUrl = "###";  // Please set the image URL.
const s3 = S3.getInstance(awsAccessKeyId, awsSecretKey);  // Please set them.

const imageBlob = UrlFetchApp.fetch(imageUrl).getBlob();
s3.putObject(bucketName, 'test.png', imageBlob, { logRequests:true });
这样,您的令牌可以由修改后的库创建并使用它。 当我检查时,我认为字节数组可能可以使用。 参考资料:
当base64用于s3.putObject时,可以正确上载图像。我的理解正确吗?是的,我可以正确上传S3中的base64!谢谢你的回复。当我看到S3forGoogleApps脚本时,这个blob似乎是用getDataAsString发送的。我认为这可能是问题的原因。这样,可以正确使用base64数据,而不能直接使用blob。在您想要使用的API中,我可以问一下除base64之外的其他可用类型吗?啊。。好的,当然!基本上我需要获取一个公共图像UrlFetchApp.fetch'imageUrl'并将其作为png图像上传到S3中。当base64用于S3.putObject时,您可以正确上传图像。我的理解正确吗?是的,我可以正确上传S3中的base64!谢谢你的回复。当我看到S3forGoogleApps脚本时,这个blob似乎是用getDataAsString发送的。我认为这可能是问题的原因。这样,可以正确使用base64数据,而不能直接使用blob。在您想要使用的API中,我可以问一下除base64之外的其他可用类型吗?啊。。好的,当然!基本上,我需要获取一个公共图像UrlFetchApp。获取“imageUrl”并将其作为png图像上传到S3中。它作为base64字符串上传,例如,当我转到S3并单击test.png时,我会看到:ivborw0kggoaaansuheugaagaaaai。。。II=但我希望看到的是实际图像,而不是字符串。仅供参考,这与我的工作版本完全相同@萨吉布·汗感谢您的回复。当我问你能不能
当base64用于s3.putObject时,请正确上载映像。您说是的,我可以在s3中正确上载base64!。另外,我在您的情况下确认,图像的base64数据可以作为图像正确上传。听我的回答,这个怎么样?对不起,有误会。。我猜你问我在将base64字符串上传到S3时是否有任何问题。。更新OP@Sajib谢谢你的回复。在您的情况下,映像的base64数据无法作为映像正确上载。我的理解正确吗?图像的base64数据不能作为图像正确上载-是的,它不是作为image.png格式上载,而是作为字符串上载。它是作为base64字符串上载的,例如,当我转到S3并单击test.png时,我会看到:ivborw0kggoaansuheugaaaaaaai。。。II=但我希望看到的是实际图像,而不是字符串。仅供参考,这与我的工作版本完全相同@萨吉布·汗感谢您的回复。当我问你是否可以正确上传图像时,base64用于s3.putObject.,你说是的,我可以正确上传s3中的base64!。另外,我在您的情况下确认,图像的base64数据可以作为图像正确上传。听我的回答,这个怎么样?对不起,有误会。。我猜你问我在将base64字符串上传到S3时是否有任何问题。。更新OP@Sajib谢谢你的回复。在您的情况下,映像的base64数据无法作为映像正确上载。我的理解正确吗?图像的base64数据不能作为图像正确上载-是的,它不是作为image.png格式上载,而是作为字符串上载。
request.setContent(object.getBytes());
if (typeof content != 'string') throw 'content must be passed as a string'
// if (typeof content != 'string') throw 'content must be passed as a string'
return Utilities.base64Encode(Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, this.content, Utilities.Charset.UTF_8));
return Utilities.base64Encode(Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, this.content));
const imageUrl = "###";  // Please set the image URL.
const s3 = S3.getInstance(awsAccessKeyId, awsSecretKey);  // Please set them.

const imageBlob = UrlFetchApp.fetch(imageUrl).getBlob();
s3.putObject(bucketName, 'test.png', imageBlob, { logRequests:true });