【问题标题】:Traverse files in sftp and store to azure blob遍历 sftp 中的文件并存储到 azure blob
【发布时间】:2015-09-07 17:14:02
【问题描述】:

基本上,我创建了一个 azure webjob,它将遍历具有 sftp 位置详细信息的 sql 表中的记录。对于每个 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);
        }

【问题讨论】:

    标签: c# sftp azure-blob-storage


    【解决方案1】:

    您好,据我了解,您需要将文件/文件夹从 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
    

    【讨论】:

    • 感谢您的回复。我已经更新了我的代码。我只是想知道无论如何我可以使用一些模式,比如迭代器模式来实现同样的目的。
    猜你喜欢
    • 2021-06-07
    • 2022-01-18
    • 1970-01-01
    • 2023-04-05
    • 2021-07-09
    • 2018-02-12
    • 2018-04-08
    • 1970-01-01
    • 2018-04-06
    相关资源
    最近更新 更多