It sounds like you were missing the &quot;Content-MD5&quot; header on your put requests. As i recall S3 will return an HTTP error response if the complete object does not match the Content-MD5 the client sends. The other issue with the HTTP protocol is that the request body doesnt have a mandatory delimiter. The client&#x2F;server cant really distinguish between a terminated TCP connection and a complete HTTP body without the optional Content-Length&#x2F;Content-MD5 headers. It really sounds like one or more of your latge files were timing out somewhere and the checksum was t sent.