public FtpInboundData TryCreateJobData(FtpDownloadMetadata item, out bool jobAlreadyExisted) { FtpInboundData returnValue; if (item.Settings.IgnoreDuplicates) { using (var transaction = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = IsolationLevel.Serializable })) { returnValue = _documentSession.Query<FtpInboundData>() .Customize(i => i.WaitForNonStaleResultsAsOfLastWrite(TimeSpan.FromSeconds(120))) .SingleOrDefault(i => i.Directory == item.Directory && i.FileName == item.FileName); if (returnValue == null) { returnValue = new FtpInboundData { Directory = item.Directory, FileName = item.FileName, QueuedDateTimeUtc = DateTime.UtcNow, InboundQueueIdentifier = item.Settings.InboundQueueIdentifier, AttachmentId = this.DownloadFile(item) }; jobAlreadyExisted = false; _documentSession.Store(returnValue); _documentSession.SaveChanges(); transaction.Complete(); } else { jobAlreadyExisted = true; } } } else { returnValue = new FtpInboundData { Directory = item.Directory, FileName = item.FileName, QueuedDateTimeUtc = DateTime.UtcNow, InboundQueueIdentifier = item.Settings.InboundQueueIdentifier, AttachmentId = this.DownloadFile(item) }; jobAlreadyExisted = false; _documentSession.Store(returnValue); _documentSession.SaveChanges(); } return returnValue; }
public List<FtpDownloadMetadata> GetAvailableDownloadList(FtpDownloadSettings ftpDownloadSettings) { var returnList = new List<FtpDownloadMetadata>(); List<string> patternList = ftpDownloadSettings.FilePatternList; if(patternList == null || patternList.Count == 0) { patternList.Add("*.*"); } foreach(string pattern in patternList) { var list = _ftpCommunicator.GetFileList(ftpDownloadSettings.SettingSource, ftpDownloadSettings.SettingKey, ftpDownloadSettings.DownloadDirectory, pattern); if(list != null && list.Count > 0) { foreach(string fileName in list) { var newItem = new FtpDownloadMetadata { Directory = ftpDownloadSettings.DownloadDirectory, FileName = fileName, Settings = ftpDownloadSettings }; returnList.Add(newItem); } } } return returnList; }
public string DownloadFile(FtpDownloadMetadata item) { string ftpFilePath; if (!string.IsNullOrEmpty(item.Directory)) { if(item.Directory.EndsWith("/")) { ftpFilePath = item.Directory + item.FileName; } else { ftpFilePath = item.Directory + "/" + item.FileName; } } else { ftpFilePath = item.FileName; } string tempDirectory = Path.Combine(Path.GetTempPath(), "MMDB.DataService"); if (!Directory.Exists(tempDirectory)) { Directory.CreateDirectory(tempDirectory); } string tempPath = Path.Combine(tempDirectory, Guid.NewGuid().ToString() + "." + item.FileName); try { _ftpCommunicator.DownloadFile(item.Settings.SettingSource, item.Settings.SettingKey, ftpFilePath, tempPath); string attachmentID = Guid.NewGuid().ToString(); using(FileStream stream = new FileStream(tempPath, FileMode.Open)) { _ravenManager.SetAttachment(attachmentID, stream); } return attachmentID; } finally { try { if (File.Exists(tempPath)) { File.Delete(tempPath); tempPath = null; } } catch { } } }