WinSCP.SessionRemoteException: не удалось скопировать файлы на удаленную сторону. Не удалось изменить на / ftp: /; ftp: не найден

enter code hereУ меня проблема с размещением файла на удаленном FTP-сервере.

Я использую сборку WinSCP .NET с C #.

Я могу подключиться к FTP-серверу, но когда я пытаюсь использовать session.PutFile(local,remote), он переходит на transferResult.Check() с ошибкой:

{WinSCP.SessionRemoteException: Ошибка при передаче файла C: \ testfile.txt. ---> WinSCP.SessionRemoteException: не удалось скопировать файлы на удаленную сторону. Не удалось изменить на «/ ftp: /»; ftp: не найден.

Пожалуйста, найдите мой код ниже.

private static void transferWinSCP()
{
    string userName = myUsername;
    string password = myPassword;
    string path = ftp://hostname.com/f/fofd671e-0eee-4c23-932d-4ba32c938c8f;
    string logPath = ConfigurationManager.AppSettings["LogPath"];**
    try
    {
        SessionOptions sessionOptions = new SessionOptions
        {
            Protocol = Protocol.Ftp,
            HostName = "hostname.com",
            PortNumber = 990,
            UserName = userName,
            Password = password,
            FtpSecure = FtpSecure.Implicit,
            FtpMode = FtpMode.Passive,
            TlsHostCertificateFingerprint = "xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx"
        };

        using (Session session = new Session())
        {

            session.SessionLogPath = logPath;

            //connect
            session.Open(sessionOptions);

            //upload
            TransferOptions transferOptions = new TransferOptions {TransferMode = TransferMode.Binary};

            TransferOperationResult transferResult = session.PutFiles(@"C:\testfile.txt",url, false,
                    transferOptions);
            transferResult.Check(); //ftp error

            foreach (TransferEventArgs transfer in transferResult.Transfers)
            {
                Console.Write("upload of {0} succeeded", transfer.FileName);
            }
        }
    }
    catch (Exception ex)
    {
        Console.Write("error {0}", ex);
    }
}

Вот мой файл журнала:

. 2015-08-07 10:43:11.653 --------------------------------------------------------------------------
. 2015-08-07 10:43:11.653 WinSCP Version 5.7.4 (Build 5553) (OS 6.1.7601 Service Pack 1 - Windows 7 Professional)
. 2015-08-07 10:43:11.653 Configuration: nul
. 2015-08-07 10:43:11.653 Log level: Normal
. 2015-08-07 10:43:11.653 Local account: userDomain\userUserName
. 2015-08-07 10:43:11.653 Process ID: 30816
. 2015-08-07 10:43:11.653 Command-line: " /xmllog="C:\..\..\\Local\Temp\wscp2A00.01E1F1E1.tmp" /xmlgroups /nointeractiveinput /dotnet=574  /ini=nul /log="C:\Log.txt"  /console /consoleinstance=_10752_27784591_85
. 2015-08-07 10:43:11.653 Time zone: Current: GMT-4, Standard: GMT-5 (Eastern Standard Time), DST: GMT-4 (Eastern Daylight Time), DST Start: 3/8/2015, DST End: 11/1/2015
. 2015-08-07 10:43:11.653 Login time: Friday, August 07, 2015 10:43:11 AM
. 2015-08-07 10:43:11.653 --------------------------------------------------------------------------
. 2015-08-07 10:43:11.653 Script: Retrospectively logging previous script records:
> 2015-08-07 10:43:11.653 Script: option batch on
< 2015-08-07 10:43:11.653 Script: batch           on        
< 2015-08-07 10:43:11.653 Script: reconnecttime   120       
> 2015-08-07 10:43:11.653 Script: option confirm off
< 2015-08-07 10:43:11.653 Script: confirm         off       
> 2015-08-07 10:43:11.653 Script: option reconnecttime 120
< 2015-08-07 10:43:11.653 Script: reconnecttime   120       
> 2015-08-07 10:43:11.653 Script: open ftp://domainName%2F---%40.com:***@hostName.com:990 -implicit -certificate="xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx" -passive=1 -timeout=15
. 2015-08-07 10:43:11.653 --------------------------------------------------------------------------
. 2015-08-07 10:43:11.653 Session name: domain\[email protected] (Ad-Hoc site)
. 2015-08-07 10:43:11.653 Host name: hostName.com (Port: 990)
. 2015-08-07 10:43:11.654 User name: domainName/username (Password: Yes, Key file: No)
. 2015-08-07 10:43:11.654 Transfer Protocol: FTP
. 2015-08-07 10:43:11.654 Ping type: C, Ping interval: 30 sec; Timeout: 15 sec
. 2015-08-07 10:43:11.654 Disable Nagle: No
. 2015-08-07 10:43:11.654 Proxy: none
. 2015-08-07 10:43:11.654 Send buffer: 262144
. 2015-08-07 10:43:11.654 UTF: 2
. 2015-08-07 10:43:11.654 FTP: FTPS: Implicit TLS/SSL; Passive: Yes [Force IP: A]; MLSD: A [List all: A]
. 2015-08-07 10:43:11.654 Session reuse: Yes
. 2015-08-07 10:43:11.654 TLS/SSL versions: TLSv1.0-TLSv1.2
. 2015-08-07 10:43:11.654 Local directory: default, Remote directory: home, Update: Yes, Cache: Yes
. 2015-08-07 10:43:11.654 Cache directory changes: Yes, Permanent: Yes
. 2015-08-07 10:43:11.654 Timezone offset: 0h 0m
. 2015-08-07 10:43:11.654 --------------------------------------------------------------------------
. 2015-08-07 10:43:11.928 Connecting to hostName.com:990 ...
. 2015-08-07 10:43:11.969 Connected with hostName.com:990, negotiating TLS connection...
. 2015-08-07 10:43:12.040 Verifying certificate for "" with fingerprint xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx and 20 failures
. 2015-08-07 10:43:12.072 Certificate verified against Windows certificate store
. 2015-08-07 10:43:12.072 Certificate common name "*.sharefileftp.com" matches hostname
. 2015-08-07 10:43:12.073 Using TLSv1, cipher TLSv1/SSLv3: RC4-SHA, 2048 bit RSA
. 2015-08-07 10:43:12.073 TLS connection established. Waiting for welcome message...
< 2015-08-07 10:43:12.273 220 ftp-ec2-1.sharefile.com FTP Server Ready (SSL)
> 2015-08-07 10:43:12.273 USER domainName/username
< 2015-08-07 10:43:12.301 331 Hello domainName/username, please enter your password.
> 2015-08-07 10:43:12.301 PASS *********
< 2015-08-07 10:43:12.711 230-Connection established from (unknown) [IPAddress].
< 2015-08-07 10:43:12.938 230-You are connected as username (username).
< 2015-08-07 10:43:12.938 230 Welcome to the Host FTP site.
> 2015-08-07 10:43:12.938 SYST
< 2015-08-07 10:43:13.193 215 UNIX Type: L8
> 2015-08-07 10:43:13.193 FEAT
< 2015-08-07 10:43:13.221 211-Extensions supported:
< 2015-08-07 10:43:13.445  EPSV
< 2015-08-07 10:43:13.445  MDTM
< 2015-08-07 10:43:13.445  PASV
< 2015-08-07 10:43:13.445  REST STREAM
< 2015-08-07 10:43:13.445  SIZE
< 2015-08-07 10:43:13.445  UTF8
< 2015-08-07 10:43:13.445  PBSZ
< 2015-08-07 10:43:13.445  PROT
< 2015-08-07 10:43:13.445  X-NOVELLABS
< 2015-08-07 10:43:13.445  X-CITRIX
< 2015-08-07 10:43:13.445 211 End.
> 2015-08-07 10:43:13.445 OPTS UTF8 ON
< 2015-08-07 10:43:13.472 200 OK.
> 2015-08-07 10:43:13.472 PBSZ 0
< 2015-08-07 10:43:13.498 200 OK.
> 2015-08-07 10:43:13.498 PROT P
< 2015-08-07 10:43:13.526 200 Data connections set to secure (SSL) mode
. 2015-08-07 10:43:13.526 Connected
. 2015-08-07 10:43:13.526 --------------------------------------------------------------------------
. 2015-08-07 10:43:13.526 Using FTP protocol.
. 2015-08-07 10:43:13.526 Doing startup conversation with host.
> 2015-08-07 10:43:13.526 PWD
< 2015-08-07 10:43:13.554 257 "/"
. 2015-08-07 10:43:13.554 Getting current directory name.
. 2015-08-07 10:43:13.554 Startup conversation with host finished.
< 2015-08-07 10:43:13.554 Script: Active session: [1] domain/[email protected]
> 2015-08-07 10:43:13.684 Script: pwd
< 2015-08-07 10:43:13.684 Script: /
> 2015-08-07 10:43:15.532 Script: put  -nopermissions -preservetime -transfer="binary" -- "C:\testFile.txt" "/f/fofd671e-0eee-4c23-932d-4ba32c938c8f/"
. 2015-08-07 10:43:15.534 Copying 1 files/directories to remote directory "/f/fofd671e-0eee-4c23-932d-4ba32c938c8f/"
. 2015-08-07 10:43:15.534   PrTime: Yes; PrRO: No; Rght: rw-r--r--; PrR: No (No); FnCs: N; RIC: 0100; Resume: S (102400); CalcS: No; Mask: 
. 2015-08-07 10:43:15.534   TM: B; ClAr: No; RemEOF: No; RemBOM: No; CPS: 0; NewerOnly: No; InclM: ; ResumeL: 0
. 2015-08-07 10:43:15.534   AscM: *.*html; *.htm; *.txt; *.php; *.php3; *.cgi; *.c; *.cpp; *.h; *.pas; *.bas; *.tex; *.pl; *.js; .htaccess; *.xtml; *.css; *.cfg; *.ini; *.sh; *.xml
. 2015-08-07 10:43:15.535 File: 'C:\testFile.txt' [2015-03-31T18:55:35.408Z] [35]
. 2015-08-07 10:43:15.536 Copying "C:\testFile.txt" to remote directory started.
. 2015-08-07 10:43:15.536 Binary transfer mode selected.
. 2015-08-07 10:43:15.536 Starting upload of C:\testFile.txt
> 2015-08-07 10:43:15.536 CWD /f/fofd671e-0eee-4c23-932d-4ba32c938c8f/
< 2015-08-07 10:43:15.730 550 Could not change to "/f/fofd671e-0eee-4c23-932d-4ba32c938c8f/"; 'f' not found.
> 2015-08-07 10:43:15.730 CWD /f/
< 2015-08-07 10:43:15.915 550 Could not change to "/f/"; 'f' not found.
> 2015-08-07 10:43:15.915 CWD /
< 2015-08-07 10:43:16.113 250 "/" is the current directory.
> 2015-08-07 10:43:16.113 MKD f
< 2015-08-07 10:43:16.466 550 Error creating 'f': Insufficient permissions to create this folder here.
> 2015-08-07 10:43:16.466 CWD /f/
< 2015-08-07 10:43:16.654 550 Could not change to "/f/"; 'f' not found.
. 2015-08-07 10:43:16.654 Copying files to remote side failed.
* 2015-08-07 10:43:16.654 (ExtException) **Copying files to remote side failed.**
* 2015-08-07 10:43:16.654 Could not change to "/f/"; 'f' not found.
. 2015-08-07 10:43:16.654 Asking user:
. 2015-08-07 10:43:16.654 Error transferring file 'C:testFile.txt'. ("Copying files to remote side failed.","Could not change to ""/f/""; 'f' not found.")
< 2015-08-07 10:43:16.654 Script: Error transferring file 'C:\testFile.txt'.
< 2015-08-07 10:43:16.654 Script: Copying files to remote side failed.

< 2015-08-07 10:43:16.654 Could not change to "/f/"; 'f' not found.
* 2015-08-07 10:43:16.655 (EScpSkipFile) Error transferring file 'C:\testFile.txt'.
* 2015-08-07 10:43:16.655 Copying files to remote side failed.
* 2015-08-07 10:43:16.655 Could not change to "/f/"; 'f' not found.
. 2015-08-07 10:43:16.655 Script: Failed
> 2015-08-07 10:43:18.436 Script: exit
. 2015-08-07 10:43:18.436 Script: Exit code: 1
. 2015-08-07 10:43:18.436 Disconnected from server

person dspyank    schedule 04.08.2015    source источник


Ответы (1)


remotePath аргумент метода Session.PutFiles:

Полный путь, в который нужно загрузить файл. При загрузке нескольких файлов имя файла в пути следует заменить маской операции или опустить (путь заканчивается косой чертой).

Вы передаете не путь, а URL-адрес. Зачем? Вы уже указали свое имя хоста и протокол в SessionOptions.

Используйте только путь.

Кроме того, поскольку путь - это имя целевой папки (а не имя целевого файла), он должен заканчиваться косой чертой (или именем файла).

string path = "/f/fofd671e-0eee-4c23-932d-4ba32c938c8f/";
...
session.PutFiles(@"C:\testfile.txt", path, false, transferOptions);

См. Официальный пример загрузки файлов с помощью сборки WinSCP .NET.

person Martin Prikryl    schedule 05.08.2015
comment
Привет, Мартин, я ценю помощь. Я использовал правильный путь и получил: Спасибо, Мартин, однако, когда я использую: {WinSCP.SessionRemoteException: Ошибка при передаче файла 'C: \ testfile.txt'. --- ›WinSCP.SessionRemoteException: не удалось скопировать файлы на удаленную сторону. Не удалось изменить на / f /; 'f' не найдено. - person dspyank; 05.08.2015
comment
И существует ли путь /f/ на сервере? - person Martin Prikryl; 05.08.2015
comment
Это ссылка, которую предоставляет их сайт. если я удалю / f /, он просто переместится вниз по строке: / fofd671e-0eee-4c23-932d-4ba32c938c8f не существует и так далее. Что касается примеров, это то, что я использовал для запуска своего кода. Спасибо за это (до сих пор здесь нет опыта использования winSCP) - person dspyank; 05.08.2015
comment
Я тоже использовал незашифрованный путь, произошло то же самое. - person dspyank; 05.08.2015
comment
/f/fofd671e-0eee-4c23-932d-4ba32c938c8f целевая папка или целевое имя файла в /f/ папке? Что вы имеете в виду под незашифрованным путем? Можете выложить ссылку на их сайт, где они описывают путь? - person Martin Prikryl; 05.08.2015
comment
У меня нет доступа туда. Так можно хотя бы ответить на первый вопрос? (если fofd671e-0eee-4c23-932d-4ba32c938c8f - имя файла или имя папки). - person Martin Prikryl; 05.08.2015
comment
это имя папки - person dspyank; 05.08.2015
comment
Тогда вам не хватает косой черты в конце пути. См. Мой отредактированный ответ. - person Martin Prikryl; 05.08.2015
comment
Я все еще получаю: WinSCP.SessionRemoteException: не удалось скопировать файлы на удаленную сторону. Не удалось изменить на / f /; 'f' не найдено. Я передал: / f / fofd671e-0eee-4c23-932d-4ba32c938c8f / на удаленный путь - person dspyank; 07.08.2015
comment
Можете ли вы установить session.SessionLogPath перед session.Open и включить файл журнала в свой вопрос? - person Martin Prikryl; 07.08.2015
comment
Обновлено. Спасибо, что остались со мной на этом @Martin Prikryl - person dspyank; 07.08.2015
comment
Думаю, совершенно очевидно, что папки /f не существует. Значит, путь неверный. Мы не можем вам здесь помочь, так как это проприетарная система. Можете ли вы хотя бы опубликовать снимок экрана со страницей, на которой написано, что вам следует использовать этот путь? - person Martin Prikryl; 07.08.2015
comment
Похоже, что ссылка, которую давала мне третья сторона, была неверной все время. Однако ваши методы были правильными, и я большое вам спасибо за ваше терпение и ваше время @Martin Prikryl - person dspyank; 07.08.2015