gpt4 book ai didi

java - 创建文件后立即将其放入 S3

转载 作者:行者123 更新时间:2023-11-30 10:30:37 24 4
gpt4 key购买 nike

我有两台装有不同 Java 应用程序的机器,它们都在 Linux 上运行并使用一个通用的 Windows share 文件夹。一个应用程序正在触发另一个应用程序生成特定文件(例如图像/pdf)。然后第一个应用程序尝试将生成的文件上传到 S3。问题是我有时会得到这个:

com.amazonaws.services.s3.model.AmazonS3Exception: The Content-MD5 you specified did not match what we received.

或者这个:

com.amazonaws.AmazonClientException: Data read has a different length than the expected: dataLength=247898; expectedLength=262062; includeSkipped=false; in.getClass()=class com.amazonaws.internal.ResettableInputStream; markedSupported=true; marked=0; resetSinceLastMarked=false; markCount=1; resetCount=0

所有进程都同步发生,一个接一个(我还检查了没有显示并发 Activity 的日志)。此外,我没有自己设置 md5 哈希或内容长度,aws-sdk 会自行处理。

所以我的猜测是生成应用程序已写入文件并返回,但实际上它仍在由操作系统在后台写入,这就是第一个应用程序获得不完整文件的原因。

我非常感谢有关如何处理此类情况的建议。也许有一种方法可以检测文件当前是否未被操作系统修改?

最佳答案

我遇到了 AmazonS3Exception: The Content-MD5 you specified did not match what we received. 我最终通过解决下面列表中的第一项解决了这个问题,不是很明显。

其他人的可能解决方案:

  • 确保不要在多个 putObject 调用中使用相同的 ObjectMetadata 对象。
  • 考虑禁用 ChunkedEncoding。 client.setS3ClientOptions(S3ClientOptions.builder().disableChunkedEncoding().build())
  • 确保文件在上传时未被编辑。

关于java - 创建文件后立即将其放入 S3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43630249/

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