2015-09-07 68 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

感谢您的答复。我更新了我的代码。我只是想知道,无论如何,我可以使用一些像迭代器模式的模式来实现相同的功能。 –