遍历 sftp 中的文件并存储到 azure blob

Traverse files in sftp and store to azure blob

基本上我创建了一个 azure webjob,它将循环遍历来自 sql table 的记录,该记录具有 sftp 位置详细信息。对于每个 sftp 位置,使用 sftpclient 连接并读取文件夹中的所有文件。 对于每个文件,我连接到 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);
        }

您好,据我了解,您需要将 files/folders 从 FTP 复制到 Azure 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