gpt4 book ai didi

java - AWS Lambda 和 S3 - 上传的 pdf 文件为空白/损坏

转载 作者:行者123 更新时间:2023-12-04 10:32:58 24 4
gpt4 key购买 nike

我有一个 Spring 应用程序(在 AWS Lambda 上运行),它获取一个文件并将其上传到 AWS S3。

Spring Controller 发送一个 MultipartFile 到我的方法,使用 Amazon API Gateway 将它上传到 AWS S3。

public static void uploadFile(MultipartFile mpFile, String fileName) throws IOException{

String dirPath = System.getProperty("java.io.tmpdir", "/tmp");
File file = new File(dirPath + "/" + fileName);

OutputStream ops = new FileOutputStream(file);
ops.write(mpFile.getBytes());

s3client.putObject("fakebucketname", fileName, file);

}

我尝试上传一个包含 2 页文本的 PDF 文件。上传后,PDF 文件(在 AWS S3 上)有 2 个空白页。

为什么上传的PDF文件是空白的?

我也尝试过其他文件(如 PNG 图像),当我打开它时,我上传的图像已损坏。

唯一有用的是当我上传一个文本文件时。

最佳答案

事实证明,这将起到这个作用。感谢@KunLun 的帮助,一切都与编码有关。在我的场景中,文件是通过 POST 到 url 传递给 aws 的多部分文件 (pdf)。

        Base64.Encoder enc = Base64.getEncoder();
byte[] encbytes = enc.encode(file.getBytes());
for (int i = 0; i < encbytes.length; i++)
{
System.out.printf("%c", (char) encbytes[i]);
if (i != 0 && i % 4 == 0)
System.out.print(' ');
}
Base64.Decoder dec = Base64.getDecoder();
byte[] barray2 = dec.decode(encbytes);
InputStream fis = new ByteArrayInputStream(barray2);

PutObjectResult objectResult = s3client.putObject("xxx", file.getOriginalFilename(), fis, data);

关于java - AWS Lambda 和 S3 - 上传的 pdf 文件为空白/损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60328325/

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