Пример #1
0
        public void InsertFileSystem(FileSystemDTO model)
        {
            Mapper.Initialize(cfg => cfg.CreateMap <FileSystemDTO, FileSystem>());

            var fileSystem = Mapper.Map <FileSystem>(model);

            try
            {
                var folderExist = _fileSystemRepository.Get(fileSystem.UserId, fileSystem.ParentId, fileSystem.Name);

                if (folderExist)
                {
                    _fileSystemRepository.InsertObject(fileSystem);
                }
            }
            catch (DataException ex)
            {
                Trace.TraceError(ex.Message);
                throw;
            }
            catch (Exception ex)
            {
                Trace.TraceError(ex.Message);
                throw;
            }
        }
Пример #2
0
        public async Task Listen()
        {
            Console.WriteLine("Archive listener started listen:");
            Trace.TraceError("Archive listener started listen");

            while (true)
            {
                var messages = Queue.GetMessages(CountMessages, TimeSpan.FromHours(InvisibleTime));

                Parallel.ForEach(messages, async message =>
                {
                    try
                    {
                        ArchiveModel archiveModel = JsonConvert.DeserializeObject <ArchiveModel>(message.AsString);
                        Console.WriteLine(message.AsString);

                        byte[] outputZIP;

                        using (MemoryStream outputMemStream = new MemoryStream())
                        {
                            using (ZipOutputStream zipStream = new ZipOutputStream(outputMemStream))
                            {
                                zipStream.SetLevel(3);

                                string entryLocateName = "";

                                foreach (var fileSystemId in archiveModel.FileSystemsId)
                                {
                                    FileSystemDTO fileSystem = _fileSystemService.Get(fileSystemId);
                                    if (fileSystem != null)
                                    {
                                        await ZipArchivingFileSystemTreeAsync(fileSystem, zipStream, archiveModel.UserId, entryLocateName);
                                    }
                                }

                                zipStream.IsStreamOwner = false;
                                zipStream.Close();

                                outputMemStream.Position = 0;

                                outputZIP = outputMemStream.ToArray();
                            }
                        }

                        await UploadFileInBlocksAsync(outputZIP, archiveModel.Id);

                        Queue.DeleteMessage(message);
                    }
                    catch (Exception ex)
                    {
                        Trace.TraceError(ex.InnerException.Message);
                    }
                });
            }
        }
 private void UserFileSystem_Test_Assertion(FileSystem expectedFilesystem, FileSystemDTO filesystemDto)
 {
     Assert.AreEqual(expectedFilesystem.BlobLink, filesystemDto.BlobLink);
     Assert.AreEqual(expectedFilesystem.BlobThumbnail, filesystemDto.BlobThumbnail);
     Assert.AreEqual(expectedFilesystem.Id, filesystemDto.Id);
     Assert.AreEqual(expectedFilesystem.Name, filesystemDto.Name);
     Assert.AreEqual(expectedFilesystem.ParentId, filesystemDto.ParentId);
     Assert.AreEqual(expectedFilesystem.Size, filesystemDto.Size);
     Assert.AreEqual(expectedFilesystem.Type, filesystemDto.Type);
     Assert.AreEqual(expectedFilesystem.UserId, filesystemDto.UserId);
 }
Пример #4
0
        public async Task ZipArchivingFileSystemTreeAsync(FileSystemDTO fileSystem, ZipOutputStream zipStream, string userId, string entryLocateName)
        {
            if (fileSystem.BlobLink != null)
            {
                string blobLink  = ConfigurationManager.AppSettings.Get("azureStorageBlobLink") + fileSystem.BlobLink;
                byte[] fileBytes = await DownloadFileAsync(blobLink);

                string locateName = entryLocateName;

                if (entryLocateName != null)
                {
                    locateName += fileSystem.Name + fileSystem.Type;
                }

                string entryName = ZipEntry.CleanName(locateName);

                ZipEntry newEntry = new ZipEntry(entryName);
                newEntry.Size          = (long)fileSystem.Size;
                newEntry.IsUnicodeText = true;

                zipStream.PutNextEntry(newEntry);

                using (MemoryStream inputMemoryStream = new MemoryStream(fileBytes))
                {
                    byte[] buffer = new byte[4096];
                    StreamUtils.Copy(inputMemoryStream, zipStream, buffer);
                }

                zipStream.CloseEntry();
            }
            else
            {
                string locateName = entryLocateName;

                locateName += fileSystem.Name + "/";

                string   entryName = ZipEntry.CleanName(locateName);
                ZipEntry newEntry  = new ZipEntry(entryName);
                newEntry.IsUnicodeText = true;

                zipStream.PutNextEntry(newEntry);
                zipStream.CloseEntry();

                List <FileSystemDTO> fileSystems = _fileSystemService.GetAll(userId, fileSystem.Id).ToList();

                foreach (var fs in fileSystems)
                {
                    await ZipArchivingFileSystemTreeAsync(fs, zipStream, userId, locateName);
                }
            }
        }