如何将blob文件下载到内存流?

时间:2017-09-16 12:18:22

标签: c# azure

我编写的代码只将第一个文件提取到需要在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();
            }
        }

1 个答案:

答案 0 :(得分:2)

请尝试使用以下代码,它在我这边正常工作。我测试容器中的4个blob,blob构造如下。

enter image description here

演示代码:

  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

enter image description here

相关问题