2017-09-16 5 views
0

私はSFTPで送信する必要があるメモリストリームに最初のファイルだけをフェッチするコードを書いていますので、最初のファイルだけがSFTPに送信されます&ブロブに3つのファイルがあります。 ここに私のコードです。blobファイルをメモリストリームにダウンロードする方法は?

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(); 
      } 
     } 
+2

をブロブをアップロード '私のコードは、それが例外をスローして、大きなfile'を取得されていませんか?他に何か? – mjwills

+0

blobに複数のファイルがありますが、2番目のファイルサイズは33 MBで、コードでフェッチされませんが、1 MB未満のSFTPに送信されます。 – user8123152

+2

「コードでフェッチされていない」とはどういう意味ですか? – mjwills

答えて

1

次のコードを試してみると、私の側で正しく動作します。私はコンテナ内の4つのブロブをテストし、以下のようにブロブのコンストラクトをテストします。

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 
      } 
     } 
    } 

チェックは、コマンドから

enter image description here

関連する問題