use*_*300 2 .net c# pdf sdk amazon-s3
我正在尝试使用 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);
}
Run Code Online (Sandbox Code Playgroud)
我希望能够查看 PDF,但它上传的是空白 PDF。Sendgrid 也使用 base64 字符串作为电子邮件发送,并且它正在工作,所以我认为它与 base64 字符串无关。
PDF 是二进制文件 - 它们不是纯文本。
您正在获取 Base64 编码的二进制文件,并使用(这很好)将其转换回字节数组Convert.FromBase64String(illustrationDocumentBody)
,但随后将该二进制 PDF 数据解释为 UTF-8 字符串(使用Encoding.UTF8.GetString(...)
)。
但是,PDF 数据不是字符串,并且不能被解释为字符串。
您可能想要使用PutObjectRequest.InputStream
(它允许您使用任何二进制数据,作为Stream
),而不是PutObjectRequest.ContentBody
(它只支持字符串)。
从字节数组获取 a 的最简单方法Stream
是使用 a 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
});
}
Run Code Online (Sandbox Code Playgroud)