繁体   English   中英

如何使用 PutObjectAsync 使用 dotnet SDK 将 base64 pdf 上传到 S3

[英]How to upload base64 pdf to S3 with dotnet SDK using PutObjectAsync

我正在尝试使用 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 字符串作为 email 发送,这是有效的,所以我认为它与 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
    });
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM