File Handling
Use Guzzle's multipart option and a readable stream for file contents. Close resources in a finally block. Do not manually set the multipart boundary header.
See File Uploads for a multipart example. The example requires a real application endpoint and is illustrative rather than part of the offline runnable fixture suite.