我编写的代码只将第一个文件提取到需要在SFTP上发送的内存流中,因此只有第一个文件被发送到SFTP&我在blob中有3个文件。 这是我的代码。
foreach (var blob in blobs)
{
string str = blob.StorageUri.PrimaryUri.LocalPath;
string fileName = blob.StorageUri.PrimaryUri.LocalPath.Replace("/output/ServiceNowExtract/", "");
var blobPath = string.Format("{0}", blob.StorageUri.PrimaryUri.OriginalString);
CloudBlockBlob blobSNow = container.GetBlockBlobReference(fileName.Replace(fileName, blob.StorageUri.PrimaryUri.LocalPath.Replace("/output/", "")));
string ftpFilePathSNow = string.Format("{0}/{1}", ftpUploadPathSNow, fileName);
var latestblob = container.ListBlobs();
using (var stream = new MemoryStream())
{
// Downloading the blob containt to the memory stream
blobSNow.DownloadToStream(stream);
try
{
using (var client = new SftpClient(ftpConnectionSNow))
{
client.BufferSize = 999424;
client.Connect();
stream.Position = 0;
client.UploadFile(stream, ftpFilePathSNow, true);
client.Disconnect();
}
}
答案 0 :(得分:2)
请尝试使用以下代码,它在我这边正常工作。我测试容器中的4个blob,blob构造如下。
演示代码:
var connectionString = "DefaultEndpointsProtocol=https;AccountName=accountxxxx;AccountKey=xxxxxxxxx;EndpointSuffix=core.windows.net";
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionString);
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference("output");
var blobs = container.ListBlobs();
var ftpConnectionSNow = new ConnectionInfo("HostName", "username", new PasswordAuthenticationMethod("username","password"));
const string ftpUploadPathSNow = "/home/xxx/sftptest4tom"; //sftp path
foreach (var blob in blobs)
{
CloudBlockBlob blobSNow = (CloudBlockBlob) blob;
var fileName = blobSNow.Name;
Console.WriteLine($"BlobName:{fileName} ---BlobSize:{blobSNow.Properties.Length}");
var ftpFilePathSNow = $"{ftpUploadPathSNow}/{fileName}";
using (var stream = new MemoryStream())
{
// Downloading the blob containt to the memory stream
blobSNow.DownloadToStream(stream);
try
{
using (var client = new SftpClient(ftpConnectionSNow))
{
client.BufferSize = 999424;
client.Connect();
stream.Position = 0;
client.UploadFile(stream, ftpFilePathSNow, true);
client.Disconnect();
}
}
catch (Exception)
{
// ToDo
}
}
}
从命令
检查上传的blob