Я пытаюсь сохранить файл, загруженный с сайта SFTP, с помощью библиотеки WinSCP .NET, а затем сохранить его в хранилище BLOB-объектов Azure. Я не хочу использовать CloudBlobContainer
, так как он устарел. Я продолжаю получать сообщение об ошибке:
Смещения со значением, отличным от нуля, не поддерживаются при выполнении....
await blobClient.UploadAsync
using WinSCP;
using Microsoft.Azure.Storage.Blob;
BlobServiceClient blobServiceClient = new BlobServiceClient(_connectionString);
BlobContainerClient blobContainerClient =
blobServiceClient.GetBlobContainerClient(containername);
BlobClient blobClient = blobContainerClient.GetBlobClient(filename);
using (Session session = new Session())
{
session.Open(sessionOptions);
string remotePath = "/myfile.zip";
using (System.IO.Stream stream = session.GetFile(remotePath, transferOptions))
{
await blobClient.UploadAsync(stream,new BlobHttpHeaders
{
ContentType = "application/zip"
}
);
};
Я могу записать поток на диск.
using (var fileStream = new FileStream(newfile, FileMode.Create, FileAccess.Write))
{
stream.CopyTo(fileStream);
}
Действительно, реализация потока сборки WinSCP .NET в более ранних выпусках не была совместима с Azure Blob API.
Эта решена в WinSCP 6.1. Пожалуйста, обновите.
Старый ответ, до того, как было выпущено исправление: вы можете обойти это, скопировав файл SFTP во временный буфер в памяти:
using (var stream = session.GetFile(remotePath))
using (var memoryStream = new MemoryStream())
{
stream.CopyTo(memoryStream);
memoryStream.Position = 0;
await blobClient.UploadAsync(memoryStream, new BlobHttpHeaders
{
ContentType = "application/zip"
}
);
}
@laney Stable WinSCP 6.1 с исправлением уже выпущен.
Я пока сделаю копию, и подожду, пока релиз не стабилизируется :)