gpt4 book ai didi

c# - 如何使用 PutObjectAsync 通过 dotnet SDK 将 base64 pdf 上传到 S3

转载 作者:行者123 更新时间:2023-12-02 19:51:43 25 4
gpt4 key购买 nike

我正在尝试使用 dotnet SDK 将 base64 pdf 上传到 S3。文件正在上传,但显示为空白 pdf。我错过了什么吗?

我认为问题可能与我上传的方式有关?我尝试过仅使用 illustrationDocumentBody 并将其作为字节发送。 illustrationDocumentBody 本身上传文件,但当我尝试在 S3 中查看它时,我无法加载 pdf。

try
{
await s3Client.PutObjectAsync(new PutObjectRequest
{
ContentBody = System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(illustrationDocumentBody)),
ContentType = "application/pdf",
BucketName = Environment.GetEnvironmentVariable("ESIS_SYNC_BUCKET"),
Key = $"Opportunities/{oppName}/ESIS-{brokerName}-{productCode}-{customerName}.pdf",
CannedACL = S3CannedACL.BucketOwnerFullControl
});
}
catch (AmazonS3Exception e)
{
Console.WriteLine(
"Error encountered ***. Message:'{0}' when writing an object", e.Message);
}
catch (Exception e)
{
Console.WriteLine(
"Unknown encountered on server. Message:'{0}' when writing an object", e.Message);
}

我希望能够查看 PDF,但它上传的是空白 PDF。 Sendgrid 也使用 base64 字符串作为电子邮件发送,并且它正在工作,所以我认为它与 base64 字符串无关。

最佳答案

PDF 是二进制文件 - 它们不是纯文本。

您正在获取 Base64 编码的二进制文件,并使用 Convert.FromBase64String(illustrationDocumentBody) 将其转换回字节数组(这很好),但您随后要解释该二进制文件PDF 数据作为 UTF-8 字符串(使用 Encoding.UTF8.GetString(...))。

但是,PDF 数据不是字符串,也不能被解释为字符串。

您可能想要使用 PutObjectRequest.InputStream(它允许您使用任何二进制数据,作为 Stream),而不是 PutObjectRequest.ContentBody >(仅支持字符串)。

从字节数组获取Stream的最简单方法是使用MemoryStream

using (var inputStream = new MemoryStream(Convert.FromBase64String(illustrationDocumentBody)))
{
await s3Client.PutObjectAsync(new PutObjectRequest
{
InputStream = inputStream,
ContentType = "application/pdf",
BucketName = Environment.GetEnvironmentVariable("ESIS_SYNC_BUCKET"),
Key = $"Opportunities/{oppName}/ESIS-{brokerName}-{productCode}-{customerName}.pdf",
CannedACL = S3CannedACL.BucketOwnerFullControl
});
}

关于c# - 如何使用 PutObjectAsync 通过 dotnet SDK 将 base64 pdf 上传到 S3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58026173/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com