コード例 #1
0
        /// <summary>
        /// Copy a file into the same folder
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public File CopyInFolder(Guid id)
        {
            File fileNew = null;
            var  fileDAC = new FileDAC();
            var  file    = fileDAC.SelectById(id);

            if (file != null)
            {
                var toFileId    = Guid.NewGuid();
                var fullPath    = Path.Combine(_path, file.FilePath);
                var dirPath     = Path.GetDirectoryName(file.FilePath);
                var extName     = Path.GetExtension(file.FileName)?.ToLower();
                var newFileName = toFileId + extName;
                var newFullPath = Path.Combine(_path, dirPath ?? throw new InvalidOperationException(), newFileName);

                System.IO.File.Copy(fullPath, newFullPath);

                file.Id        = toFileId;
                file.FilePath  = Path.Combine(dirPath, newFileName);
                file.Timestamp = DateTime.Now;

                fileDAC.Create(file);
                fileNew    = file;
                fileNew.Id = toFileId;
            }
            return(fileNew);
        }
コード例 #2
0
        public File Compress(byte[] data, File file)
        {
            var id           = Guid.NewGuid();
            var subFolder    = CreateSubFolder(file.FileType);
            var fullFolder   = Path.Combine(_path, subFolder);
            var extName      = Path.GetExtension(file.FileName)?.ToLower();
            var filePath     = Path.Combine(subFolder, id + extName);
            var fullFilePath = Path.Combine(fullFolder, id + extName);

            if (!Directory.Exists(fullFolder))
            {
                Directory.CreateDirectory(fullFolder);
            }

            var compressFile = new File
            {
                Id        = id,
                FilePath  = filePath,
                FileType  = file.FileType,
                FileName  = file.FileName,
                MimeType  = FileContentType.GetMimeType(extName),
                Timestamp = DateTime.Now
            };

            using (var inStream = new MemoryStream(data))
            {
                using (var outStream = new MemoryStream())
                {
                    // Initialize the ImageFactory using the overload to preserve EXIF metadata.
                    using (var imageFactory = new ImageFactory(preserveExifData: true))
                    {
                        // Load, resize, set the format and quality and save an image.
                        imageFactory.Load(inStream)
                        .Quality(30)
                        .Save(outStream);
                    }
                    using (var fileStream = new FileStream(fullFilePath, FileMode.Create, FileAccess.Write))
                    {
                        outStream.CopyTo(fileStream);

                        var compressData = new byte[outStream.Length];
                        outStream.Read(compressData, 0, compressData.Length);
                        outStream.Seek(0, SeekOrigin.Begin);
                        compressFile.Md5 = GetMD5HashFromByte(compressData);
                        return(compressFile);
                    }
                }
            }
        }
コード例 #3
0
        public Guid[] CreateWithThumbnail(File file, byte[] data)
        {
            var originId           = Guid.NewGuid();
            var subFolder          = CreateSubFolder(file.FileType);
            var fullFolder         = Path.Combine(_path, subFolder);
            var extName            = Path.GetExtension(file.FileName)?.ToLower();
            var originFilePath     = Path.Combine(subFolder, originId + extName);
            var originfullFilePath = Path.Combine(fullFolder, originId + extName);


            if (!Directory.Exists(fullFolder))
            {
                Directory.CreateDirectory(fullFolder);
            }

            using (var stream = System.IO.File.Create(originfullFilePath))
            {
                stream.Write(data, 0, data.Length);
                stream.Flush();
                stream.Close();
            }

            var compressFile = Compress(data, file);

            var fileDAC = new FileDAC();

            file.Id       = originId;
            file.FilePath = originFilePath;
            file.MimeType = FileContentType.GetMimeType(extName);
            file.Md5      = GetMD5HashFromByte(data);

            using (var scope = new TransactionScope(TransactionScopeOption.Required, new TimeSpan(0, 0, 1, 30)))
            {
                fileDAC.Create(file);
                fileDAC.Create(compressFile);

                scope.Complete();
            }

            return(new Guid[] { file.Id, compressFile.Id });
        }
コード例 #4
0
        /// <summary>
        /// Creates the specified file.
        /// </summary>
        /// <param name="file">The file.</param>
        /// <param name="data">The data.</param>
        /// <returns></returns>
        public File Create(File file, byte[] data)
        {
            var fileMd5 = GetMD5HashFromByte(data);

            var fileDAC = new FileDAC();
            var oldFile = fileDAC.SelectByMd5(fileMd5);

            var id           = Guid.NewGuid();
            var subFolder    = CreateSubFolder(file.FileType);
            var fullFolder   = Path.Combine(_path, subFolder);
            var extName      = Path.GetExtension(file.FileName)?.ToLower();
            var fullFilePath = Path.Combine(fullFolder, id + extName);

            if (!Directory.Exists(fullFolder))
            {
                Directory.CreateDirectory(fullFolder);
            }

            if (oldFile == null)
            {
                file.FilePath = Path.Combine(subFolder, id + extName);
                using (var stream = System.IO.File.Create(fullFilePath))
                {
                    stream.Write(data, 0, data.Length);
                    stream.Flush();
                    stream.Close();
                }
            }
            else
            {
                file.FilePath = oldFile.FilePath;
            }

            file.Id       = id;
            file.MimeType = FileContentType.GetMimeType(extName);
            file.Md5      = fileMd5;
            fileDAC.Create(file);

            return(file);
        }