2015-09-07 25 views
1

基本上,我創建了一個天藍色的webjob,它將通過記錄從sql表中獲取sftp位置詳細信息。對於每個sftp位置,使用sftpclient進行連接並讀取文件夾中的所有文件。 對於每個文件,我連接到azure並將其存儲在blob中。遍歷sftp中的文件和存儲到azure blob

我已經在單個文件中完成了上述操作。但是希望以適當的面向對象的方式來完成。不知道什麼是正確的方法。我對設計模式並不是很有經驗,但是如果有人能夠推薦正確的方法,我會非常喜歡。

欣賞如果有人能夠幫助我以適當的面向對象的方式實現這一目標。

感謝

  var azureBlob = AzureBlobStorage.Instance(StorageConnectionString, Containername); 

      List<SftpLocationData> sftps = null; 

      try 
      { 
       sftps = SftpLocationClient.GetSftpLocationDetails().ToList(); 
       if (sftps == null || !sftps.Any()) return; 

      } 
      catch (Exception ex) 
      { 
       LogMessage(string.Format("Error getting sftp details : {0}", ex.Message), log); 
      } 

      foreach (var fileClient in sftps.Select(sftp => new FileTransferClient(sftp))) 
      { 
       using (var sftpClient = fileClient.CreateClient()) 
       { 
        sftpClient.Connect(); 

        var files = sftpClient.ListDirectory(path: fileClient.Data.Directory ?? ".").ToList(); 
        if (files.Any()) 
        { 
         var validFiles = files.Where(f => ext.Any(e => e == Path.GetExtension(f.Name))).ToList(); 
         foreach (var file in validFiles) 
         { 
          var fileExists = azureBlob.FileExists(file.Name); 
          var blobUri = string.Empty; 
          var blobName = file.Name; 
          var fileImport = PopulateFileImportData(file); 
          if (fileExists) 
          { 
           int count = azureBlob.ListFiles(blobName); 
           blobName = (count == 0) ? blobName : String.Format("{0}_v{1}", blobName, count); 
           fileImport.Error = true; 
           fileImport.ErrorMsg = "Duplicate File"; 
          } 
          fileImport.FileName = blobName; 
          try 
          { 
           var fileSaved = RbsClient.SaveFileImport(fileImport); 

           blobUri = azureBlob.UploadFile(fileSaved.FileName, sftpClient.OpenRead(file.FullName)); 

           fileSaved.Archived = DateTime.Now; 
           RRClient.UpdateFile(fileSaved); 
          } 
          catch (Exception ex) 
          { 
           LogMessage(string.Format("Error saving fileimport detail : {0}", ex.Message), log); 
          } 

          if (fileImport.Error) continue; 

          IQueueGenerator queueGenerator = new QueueGenerator(); 

          var queueName = queueGenerator.GetQueueName(
               blobName, 
               fileClient.Data, 
               blobUri); 

          if (string.IsNullOrEmpty(queueName)) continue; 
         } 
        } 
        sftpClient.Disconnect(); 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      LogMessage(string.Format("Error occurred in processing pending altapay requests. Error : {0}", ex.Message), log); 
     } 

回答

0

嗨作爲我的理解,你需要的文件/文件夾從FTP複製到蔚藍的Blob存儲。

Step 1. Get list of SFTP locations 
Step 2. Init Azure Blob Storage Connection 
Step 3. Init SFTP 
Step 4. Iterate Files in SFTP 
Step 5. Store the file into Blob Storage 
Step 6. Close SFTP connection 
Step 7. Close Azure Blob Storage 
+0

感謝您的答覆。我更新了我的代碼。我只是想知道,無論如何,我可以使用一些像迭代器模式的模式來實現相同的功能。 –