Fala pessoal, essa foi a solução que me veio na cabeça, acredito que tem como melhorar, utilizando um arquivo em memória ao invés de um arquivo "físico" temporário, vou estudar isso com calma depois, mas assim já "funciona", espero que sirva de base para quem estava na dúvida.
public function upload(Request $request)
{
// pega o binário e salva em uma varíavel (string)
$binary = $request->getContent();
// cria um arquivo temporário
$tempFileName = tempnam('/tmp', 'tmp');
// copia a string com o binário (o arquivo em si) para o arquivo temporário
file_put_contents($tempFileName, $binary);
// Mantem o parâmetro passado na rota consistente com o nome do diretório
$pathDirectory = str_replace('-', '_', $request->query('path'));
// Aqui é utilizado o putFile() que automaticamente gera um nome de arquivo único, porém ele precisa
// de um arquivo "pronto"
$storedFile = Storage::disk('public')->putFile($pathDirectory, new File($tempFileName));
// Remove o arquivo temporário que não será mais utilizado
unlink($tempFileName);
// Retorna o path do arquivo para ser usado na rota de criar série
return $storedFile;
}