Всякий раз, когда я пытаюсь загрузить файл на SFTP-сервер с расширением файла .csv
, единственное, что в этом файле, - System.IO.MemoryStream
. Если это расширение .txt
, оно будет иметь все значения в файле. Я могу вручную преобразовать .txt
в .csv
, и все будет хорошо. Можно ли загрузить его непосредственно на сервер SFTP в виде файла CSV?
Служба SFTP использует библиотеку S SH. NET от Renci.
Использование оператор:
using (var stream = csvFileWriter.Write(data, new CsvMapper()))
{
byte[] file = Encoding.UTF8.GetBytes(stream.ToString());
sftpService.Put(SftpCredential.Credentials.Id, file, $"/file.csv");
}
SFTP-сервис:
public void Put(int credentialId, byte[] source, string destination)
{
using (SftpClient client = new SftpClient(GetConnectionInfo(credentialId)))
{
ConnectClient(client);
using (MemoryStream memoryStream = new MemoryStream(source))
{
client.BufferSize = 4 * 1024; // bypass Payload error large files
client.UploadFile(memoryStream, destination);
}
DisconnectClient(client);
}
Решение: csvFilerWriter
Я использовал вернул Stream
, а не MemoryStream
, поэтому, переключив csvFileWriter
и CsvPut()
на MemoryStream
, он заработал.
Обновлено с помощью оператора:
using (var stream = csvFileWriter.Write(data, new CsvMapper()))
{
stream.Position = 0;
sftpService.CsvPut(SftpCredential.credemtoa;s.Id, stream, $"/file.csv");
}
Обновлена служба SFTP:
public void CsvPut(int credentialId, MemoryStream source, string destination)
{
using (SftpClient client = new SftpClient(GetConnectionInfo(credentialId)))
{
ConnectClient(client);
client.BufferSize = 4 * 1024; //bypass Payload error large files
client.UploadFile(source, destination);
DisconnectClient(client);
}
}