使用 Java 将空文件上传到 S3

GOM*_*OMY 5 amazon-s3 amazon-web-services

当我尝试将空数据流式传输到 S3 时出现错误。
下面是错误:

java.lang.RuntimeException:
java.lang.RuntimeException:
java.lang.RuntimeException:
shaded.com.amazonaws.services.s3.model.AmazonS3Exception:
您提供的XML格式不正确或未根据我们发布的架构进行验证(服务:Amazon S3;状态代码:400;错误代码:MalformedXML;请求 ID:BC194D061F65DC3B),S3 扩展请求 ID:RjC6LY05Gj93iQTWAdjL/JcQBrl/NzMt749DOwpVsTJ2YN63A0EQmFWaBXxwHzBo+/a8A3MoP70=

有没有办法通过 Java SDK 输出流在 S3 中创建空文件?

bsp*_*ion 4

绝对地!假设您正在执行多部分(根据最佳实践),您将需要为零字节文件开辟一个特殊情况:

AmazonS3 s3Client = /* your S3 client builder technique */
if ( contentLength == 0 ) {
  s3Client.putObject( bucketName, targetKeyName, 
        new FileInputStream( file ), objectMetadata );
} else {
  // Do your multipart upload per usual
}
Run Code Online (Sandbox Code Playgroud)

当请求零个部分时,分段上传会引发 MalformedXML 异常,但它不会在消息中明确指出这一点。请求的另一部分也可能格式错误,例如 ObjectMetadata 已损坏,尽管在这些情况下通常您会收到更清晰的异常消息。