private function resolveUploadOptions(array $args)
{
$args += ['bucket' => null, 'name' => null, 'validate' => true, 'resumable' => null, 'predefinedAcl' => 'private', 'metadata' => []];
$args['data'] = Psr7\stream_for($args['data']);
if ($args['resumable'] === null) {
$args['resumable'] = $args['data']->getSize() > AbstractUploader::RESUMABLE_LIMIT;
}
if (!$args['name']) {
$args['name'] = basename($args['data']->getMetadata('uri'));
}
// @todo add support for rolling hash
if ($args['validate'] && !isset($args['metadata']['md5Hash'])) {
$args['metadata']['md5Hash'] = base64_encode(Psr7\hash($args['data'], 'md5', true));
}
$args['metadata']['name'] = $args['name'];
unset($args['name']);
$args['contentType'] = isset($args['metadata']['contentType']) ? $args['metadata']['contentType'] : Psr7\mimetype_from_filename($args['metadata']['name']);
$uploaderOptionKeys = ['httpOptions', 'retries', 'chunkSize', 'contentType', 'metadata'];
$args['uploaderOptions'] = array_intersect_key($args, array_flip($uploaderOptionKeys));
$args = array_diff_key($args, array_flip($uploaderOptionKeys));
return $args;
}