setName('files:put') ->setDescription('Write contents of a file') ->addArgument('input', InputArgument::REQUIRED, "Source local path, use - to read from STDIN") ->addArgument('file', InputArgument::REQUIRED, "Target Nextcloud file path to write to or fileid of existing file"); } public function execute(InputInterface $input, OutputInterface $output): int { $fileOutput = $input->getArgument('file'); $inputName = $input->getArgument('input'); $node = $this->fileUtils->getNode($fileOutput); if ($node instanceof Folder) { $output->writeln("$fileOutput is a folder"); return self::FAILURE; } if (!$node and is_numeric($fileOutput)) { $output->writeln("$fileOutput not found"); return self::FAILURE; } $source = ($inputName === null || $inputName === '-') ? STDIN : fopen($inputName, 'r'); if (!$source) { $output->writeln("Failed to open $inputName"); return self::FAILURE; } if ($node instanceof File) { $target = $node->fopen('w'); if (!$target) { $output->writeln("Failed to open $fileOutput"); return self::FAILURE; } stream_copy_to_stream($source, $target); } else { $this->rootFolder->newFile($fileOutput, $source); } return self::SUCCESS; } }