< Summary

Class:SVETA.Api.Services.Implements.DiskStorageService
Assembly:SVETA.Api
File(s):/opt/dev/sveta_api_build/SVETA.Api/Services/Implements/DiskStorageService.cs
Covered lines:5
Uncovered lines:90
Coverable lines:95
Total lines:160
Line coverage:5.2% (5 of 95)
Covered branches:0
Total branches:12
Branch coverage:0% (0 of 12)

Metrics

MethodLine coverage Branch coverage
.ctor(...)100%100%
GenerateUniqueFileName(...)0%100%
GetFullPictureFileName(...)0%100%
PictureExists(...)0%0%
SaveUpload(...)0%100%
SaveDownload(...)0%0%
SaveDownload(...)0%100%
SaveDownload(...)0%100%
SaveDownload(...)0%0%
ReadDownload(...)0%100%
SaveUploadToDownloadDir()0%0%
GetDownloadUrl(...)0%100%
GetDownloadPath(...)0%100%
GetRandomSuffixFileName(...)0%100%
GetPictureSize(...)0%0%

File(s)

/opt/dev/sveta_api_build/SVETA.Api/Services/Implements/DiskStorageService.cs

#LineLine coverage
 1using Microsoft.AspNetCore.Http;
 2using Microsoft.Extensions.Options;
 3using SVETA.Api.Data.Domain;
 4using SVETA.Api.Services.Interfaces;
 5using System;
 6using System.Collections.Generic;
 7using System.Drawing;
 8using System.IO;
 9using System.Linq;
 10using System.Threading.Tasks;
 11
 12namespace SVETA.Api.Services.Implements
 13{
 14    public class DiskStorageService : IDiskStorageService
 15    {
 16        private readonly UploadDownloadSettings _settings;
 17        readonly ImagesSettings _imagesSettings;
 18
 11219        public DiskStorageService(IOptions<UploadDownloadSettings> settings, IOptions<ImagesSettings> imagesSettings)
 11220        {
 11221            _settings = settings.Value;
 11222            _imagesSettings = imagesSettings.Value;
 11223        }
 24
 25        public string GenerateUniqueFileName(string fileName)
 026        {
 027            return GetRandomSuffixFileName(fileName);
 028        }
 29
 30        public string GetFullPictureFileName(string fileName)
 031        {
 032            return _imagesSettings.ImageSavePath.TrimEnd('/') + "/" + fileName.Trim('/');
 033        }
 34
 35        public bool PictureExists(string fileName)
 036        {
 037            if (string.IsNullOrEmpty(fileName)) return false;
 38
 039            fileName = GetFullPictureFileName(fileName);
 040            return File.Exists(fileName);
 041        }
 42
 43        public Stream SaveUpload(IFormFile file, out string fileName)
 044        {
 045            fileName = GetRandomSuffixFileName(file.FileName);
 046            var fullName = Path.Combine(_settings.UploadsSavePath, fileName);
 47
 048            using (var stream = file.OpenReadStream())
 049            {
 050                using (var fileStream = new FileStream(fullName, FileMode.Create, FileAccess.Write))
 051                {
 052                    stream.CopyTo(fileStream);
 053                }
 054            }
 55
 056            return File.OpenRead(fullName);
 057        }
 58
 59        public string SaveDownload(string fileName, string fileContent, bool uniqueName = true)
 060        {
 061            fileName = uniqueName ? GetRandomSuffixFileName(fileName) : fileName;
 062            var fullName = Path.Combine(_settings.DownloadsSavePath, fileName);
 63
 064            using (var stream = new StreamWriter(fullName, false, System.Text.Encoding.UTF8))
 065            {
 066                stream.Write(fileContent);
 067            }
 68
 069            return _settings.DownloadUrl.TrimEnd('/') + "/" + fileName;
 070        }
 71
 72        public string SaveDownload(string fileName, string fileContent, out string fullFileName)
 073        {
 074            fileName = GetRandomSuffixFileName(fileName);
 075            fullFileName = Path.Combine(_settings.DownloadsSavePath, fileName);
 76
 077            using (var stream = new StreamWriter(fullFileName, false, System.Text.Encoding.UTF8))
 078            {
 079                stream.Write(fileContent);
 080            }
 81
 082            return _settings.DownloadUrl.TrimEnd('/') + "/" + fileName;
 083        }
 84
 85        public string SaveDownload(string fileName, Stream fileContent, out string fullFileName)
 086        {
 087            fileName = GetRandomSuffixFileName(fileName);
 088            fullFileName = Path.Combine(_settings.DownloadsSavePath, fileName);
 89
 090            fileContent.Position = 0;
 091            using (var stream = new FileStream(fullFileName, FileMode.Create))
 092            {
 093                fileContent.CopyTo(stream);
 094            }
 095            fileContent.Position = 0;
 96
 097            return _settings.DownloadUrl.TrimEnd('/') + "/" + fileName;
 098        }
 99
 100        public string SaveDownload(string fileName, Stream fileContent, bool uniqueName = true)
 0101        {
 0102            fileName = uniqueName ? GetRandomSuffixFileName(fileName) : fileName;
 0103            var fullName = Path.Combine(_settings.DownloadsSavePath, fileName);
 104
 0105            using (var fileStream = File.Create(fullName))
 0106            {
 0107                fileContent.Seek(0, SeekOrigin.Begin);
 0108                fileContent.CopyTo(fileStream);
 0109            }
 0110            fileContent.Seek(0, SeekOrigin.Begin);
 111
 0112            return _settings.DownloadUrl.TrimEnd('/') + "/" + fileName;
 0113        }
 114
 115        public Stream ReadDownload(string fileName)
 0116        {
 0117            var fullName = Path.Combine(_settings.DownloadsSavePath, fileName);
 0118            return File.OpenRead(fullName);
 0119        }
 120
 121        /// <summary>
 122        /// Загружает файл от клиента в Download каталог для возможности дальнешей загрузки другим клиентом
 123        /// </summary>
 124        /// <param name="file">файл</param>
 125        /// <param name="getFullPath">true если вернуть файл с полным путем, иначе только название файла</param>
 126        /// <returns></returns>
 127        public async Task<string> SaveUploadToDownloadDir(IFormFile file, bool getFullPath = false)
 0128        {
 0129            string fileName = GetRandomSuffixFileName(file.FileName);
 0130            var fullName = Path.Combine(_settings.DownloadsSavePath, fileName);
 0131            using (var stream = new FileStream(fullName, FileMode.Create))
 0132                await file.CopyToAsync(stream);
 0133            return getFullPath ? fullName : fileName;
 0134        }
 135
 0136        public string GetDownloadUrl(string filename) => _settings.DownloadUrl.TrimEnd('/') + "/" + filename;
 0137        public string GetDownloadPath(string filename) => Path.Combine(_settings.DownloadsSavePath, filename);
 138
 139        string GetRandomSuffixFileName(string fileName)
 0140        {
 0141            return Path.GetFileNameWithoutExtension(fileName) + "_" + DateTime.Now.Ticks.ToString() + Path.GetExtension(
 0142        }
 143
 144        public bool GetPictureSize(string fileName, out int width, out int height)
 0145        {
 0146            width = 0;
 0147            height = 0;
 148
 0149            if (!PictureExists(fileName)) return false;
 150
 0151            fileName = GetFullPictureFileName(fileName);
 0152            using (var img = Image.FromFile(fileName))
 0153            {
 0154                width = img.Width;
 0155                height = img.Height;
 0156                return true;
 157            }
 0158        }
 159    }
 160}