Когда мне приходилось использовать метод ftp, мне приходилось устанавливать некоторые флаги для объекта запроса, без него функция не работала:
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpPath);
request.KeepAlive = true/false;
request.UsePassive = true/false;
request.UseBinary = xxx;
Эти флаги зависят от сервера. Если у вас нет доступа к серверу, вы не можете знать, что здесь использовать, но вы можете проверить и посмотреть, что работает в вашей конфигурации.
И имя файла, вероятно, отсутствует в конце URI, так что сервер знает, где сохранить загруженный файл.