Ошибка загрузки файла WinSCP на удаленный SFTP: «Невозможно создать удаленный файл - в доступе отказано» - PullRequest
1 голос
/ 05 марта 2020

Мы выполняли ручной процесс загрузки и выгрузки на удаленный SFTP-сервер с помощью FileZilla. С клиентским программным обеспечением у нас не было никаких проблем с разрешениями.

Недавно мы решили перевести его на запланированную функцию с помощью VB. NET. Загрузка работала хорошо (поэтому я удалил ее из своего кода, просто чтобы сделать пример кода лаконичным).

Но при загрузке программа столкнулась с ошибкой:

WinSCP.SessionRemoteException: «Невозможно создать удаленный файл» / некоторый путь / on / remote / myFile.txt.filepart ' .

Разрешение отклонено.

Код ошибки: 3

Сообщение об ошибке от сервера (en): Разрешение отклонено '

Ниже приведен код для загрузки файла.

Using session As New Session
    session.Open(sessionOptions)

    Dim transferOptions As New TransferOptions
    transferOptions.TransferMode = TransferMode.Binary

    Dim transferResult As TransferOperationResult

    ' localFilePath = "C:\somepath\myFile.txt"
    If Not String.IsNullOrEmpty(localFilePath) And File.Exists(localFilePath) Then
        transferResult = session.PutFiles(localFilePath, "/some path/on/remote/", False, transferOptions)     
        transferResult.Check()   'error was thrown here
    Else
        Throw New FileNotFoundException("The file could not be found")
    End If
End Using

Любая помощь приветствуется, спасибо за ваше время.

1 Ответ

1 голос
/ 12 марта 2020

При использовании протокола SFTP WinSCP по умолчанию передает файлы размером более 100 КБ через временный файл . Это не сработает, если у вас нет прав на создание нового файла.

В этом случае вам нужно будет отключить передачу через временный файл (или возобновляемую передачу). Для этого набора TransferOptions.ResumeSupport:

Dim transferOptions As New TransferOptions
transferOptions.ResumeSupport.State = TransferResumeSupportState.Off

transferResult =
    session.PutFiles(localFilePath, "/some path/on/remote/", False, transferOptions)
transferResult.Check()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...