Families.Web 1.0.0.0
사진, 동영상, 글, 댓글과 반응을 가족끼리만 공유하는 비공개 앨범·타임라인 서비스입니다.
로딩중...
검색중...
일치하는것 없음
FamiliesApp.Services.LocalMediaService 클래스 참조sealed

더 자세히 ...

FamiliesApp.Services.LocalMediaService에 대한 상속 다이어그램 :
FamiliesApp.Services.LocalMediaService에 대한 협력 다이어그램:

Public 멤버 함수

 LocalMediaService (IFamilyTenantStore tenants, IGlobalSettingsStore globalSettings)
async Task< string > UploadPostMediaAsync (string slug, string postId, IBrowserFile file, CancellationToken ct=default)
async Task< string > UploadCoverAsync (string slug, IBrowserFile file, CancellationToken ct=default)
Task DeletePostMediaAsync (string slug, string postId, string fileName, CancellationToken ct=default)
Task< IReadOnlyList< MediaInfo > > GetPostMediaAsync (string slug, string postId, CancellationToken ct=default)
string GetMediaUrl (string slug, string postId, string fileName)
string GetThumbUrl (string slug, string postId, string fileName)
string GetCoverUrl (string slug, string fileName)

Private 멤버 함수

async Task<(long ImageBytes, long VideoBytes)> GetLimitsAsync (string slug, CancellationToken ct)

정적 Private 멤버 함수

static long ToBytes (int mb)
static string FormatLimit (long bytes)

Private 속성

readonly IFamilyTenantStore _tenants
readonly IGlobalSettingsStore _globalSettings

정적 Private 속성

static readonly string[] AllowedImageExts = [".jpg", ".jpeg", ".png", ".webp", ".gif"]
static readonly string[] AllowedVideoExts = [".mp4", ".webm", ".mov", ".m4v"]

상세한 설명

Local Media Service 기능과 관련 상태를 캡슐화합니다.

LocalMediaService.cs 파일의 15 번째 라인에서 정의되었습니다.

생성자 & 소멸자 문서화

◆ LocalMediaService()

FamiliesApp.Services.LocalMediaService.LocalMediaService ( IFamilyTenantStore tenants,
IGlobalSettingsStore globalSettings )
inline

지정한 설정으로 LocalMediaService 클래스의 새 인스턴스를 초기화합니다.

매개변수
tenantstenants에 사용할 IFamilyTenantStore 값입니다.
globalSettingsglobal Settings에 사용할 IGlobalSettingsStore 값입니다.

LocalMediaService.cs 파일의 79 번째 라인에서 정의되었습니다.

80 {
81 _tenants = tenants;
82 _globalSettings = globalSettings;
83 }

다음을 참조함 : _globalSettings, _tenants.

멤버 함수 문서화

◆ DeletePostMediaAsync()

Task FamiliesApp.Services.LocalMediaService.DeletePostMediaAsync ( string slug,
string postId,
string fileName,
CancellationToken ct = default )
inline

Delete Post Media Async 작업을 수행합니다.

매개변수
slugslug에 사용할 string 값입니다.
postIdpost Id에 사용할 string 값입니다.
fileNamefile Name에 사용할 string 값입니다.
ct취소 요청을 감시하는 토큰입니다.
반환값
Delete Post Media Async 작업에서 생성한 Task 결과입니다.

FamiliesApp.Services.IMediaService를 구현.

LocalMediaService.cs 파일의 384 번째 라인에서 정의되었습니다.

385 {
386 var path = Path.Combine(_tenants.GetTenantDataPath(slug), "media", postId, fileName);
387 if (File.Exists(path)) File.Delete(path);
388 return Task.CompletedTask;
389 }

다음을 참조함 : _tenants.

◆ FormatLimit()

string FamiliesApp.Services.LocalMediaService.FormatLimit ( long bytes)
inlinestaticprivate

Format Limit 작업을 수행합니다.

매개변수
bytesbytes에 사용할 long 값입니다.
반환값
Format Limit 작업에서 생성한 string 결과입니다.

LocalMediaService.cs 파일의 333 번째 라인에서 정의되었습니다.

333 =>
334 bytes == long.MaxValue ? "무제한" : $"{bytes / (1024 * 1024)}MB";

◆ GetCoverUrl()

string FamiliesApp.Services.LocalMediaService.GetCoverUrl ( string slug,
string fileName )
inline

Cover Url 값을 가져옵니다.

매개변수
slugslug에 사용할 string 값입니다.
fileNamefile Name에 사용할 string 값입니다.
반환값
Get Cover Url 작업에서 생성한 string 결과입니다.

FamiliesApp.Services.IMediaService를 구현.

LocalMediaService.cs 파일의 572 번째 라인에서 정의되었습니다.

572 =>
573 $"/family-data/{slug}/{Uri.EscapeDataString(fileName)}";

◆ GetLimitsAsync()

async Task<(long ImageBytes, long VideoBytes)> FamiliesApp.Services.LocalMediaService.GetLimitsAsync ( string slug,
CancellationToken ct )
inlineprivate

Limits Async 값을 가져옵니다.

매개변수
slugslug에 사용할 string 값입니다.
ct취소 요청을 감시하는 토큰입니다.
반환값
Get Limits Async 작업에서 생성한 Task<(long ImageBytes, long VideoBytes)> 결과입니다.

LocalMediaService.cs 파일의 143 번째 라인에서 정의되었습니다.

144 {
145 var config = await _tenants.GetAsync(slug, ct).ConfigureAwait(false);
146 var settings = await _globalSettings.GetAsync(ct).ConfigureAwait(false);
147
148 var imageMb = config?.MaxImageSizeMb ?? settings.MaxImageSizeMb;
149 var videoMb = config?.MaxVideoSizeMb ?? settings.MaxVideoSizeMb;
150 return (ToBytes(imageMb), ToBytes(videoMb));
151 }

다음을 참조함 : _globalSettings, _tenants, ToBytes().

다음에 의해서 참조됨 : UploadCoverAsync(), UploadPostMediaAsync().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ GetMediaUrl()

string FamiliesApp.Services.LocalMediaService.GetMediaUrl ( string slug,
string postId,
string fileName )
inline

Media Url 값을 가져옵니다.

매개변수
slugslug에 사용할 string 값입니다.
postIdpost Id에 사용할 string 값입니다.
fileNamefile Name에 사용할 string 값입니다.
반환값
Get Media Url 작업에서 생성한 string 결과입니다.

FamiliesApp.Services.IMediaService를 구현.

LocalMediaService.cs 파일의 494 번째 라인에서 정의되었습니다.

494 =>
495 $"/family-data/{slug}/media/{postId}/{Uri.EscapeDataString(fileName)}";

다음에 의해서 참조됨 : GetPostMediaAsync().

이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ GetPostMediaAsync()

Task< IReadOnlyList< MediaInfo > > FamiliesApp.Services.LocalMediaService.GetPostMediaAsync ( string slug,
string postId,
CancellationToken ct = default )
inline

Post Media Async 값을 가져옵니다.

매개변수
slugslug에 사용할 string 값입니다.
postIdpost Id에 사용할 string 값입니다.
ct취소 요청을 감시하는 토큰입니다.
반환값
Get Post Media Async 작업에서 생성한 Task<IReadOnlyList<MediaInfo>> 결과입니다.

FamiliesApp.Services.IMediaService를 구현.

LocalMediaService.cs 파일의 431 번째 라인에서 정의되었습니다.

432 {
433 var dir = Path.Combine(_tenants.GetTenantDataPath(slug), "media", postId);
434 if (!Directory.Exists(dir)) return Task.FromResult<IReadOnlyList<MediaInfo>>([]);
435
436 var list = Directory.GetFiles(dir)
437 .Select(f =>
438 {
439 var fi = new FileInfo(f);
440 return new MediaInfo
441 {
442 FileName = fi.Name,
443 Url = GetMediaUrl(slug, postId, fi.Name),
444 ThumbUrl = GetThumbUrl(slug, postId, fi.Name),
445 SizeBytes = fi.Length,
446 LastModified = fi.LastWriteTime
447 };
448 })
449 .ToList();
450
451 return Task.FromResult<IReadOnlyList<MediaInfo>>(list);
452 }

다음을 참조함 : _tenants, GetMediaUrl(), GetThumbUrl().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ GetThumbUrl()

string FamiliesApp.Services.LocalMediaService.GetThumbUrl ( string slug,
string postId,
string fileName )
inline

Thumb Url 값을 가져옵니다.

매개변수
slugslug에 사용할 string 값입니다.
postIdpost Id에 사용할 string 값입니다.
fileNamefile Name에 사용할 string 값입니다.
반환값
Get Thumb Url 작업에서 생성한 string 결과입니다.

FamiliesApp.Services.IMediaService를 구현.

LocalMediaService.cs 파일의 537 번째 라인에서 정의되었습니다.

537 =>
538 GetMediaUrl(slug, postId, fileName);

다음에 의해서 참조됨 : GetPostMediaAsync().

이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ ToBytes()

long FamiliesApp.Services.LocalMediaService.ToBytes ( int mb)
inlinestaticprivate

To Bytes 작업을 수행합니다.

매개변수
mbmb에 사용할 int 값입니다.
반환값
To Bytes 작업에서 생성한 long 결과입니다.

LocalMediaService.cs 파일의 109 번째 라인에서 정의되었습니다.

109=> mb <= 0 ? long.MaxValue : mb * 1024L * 1024L;

다음에 의해서 참조됨 : GetLimitsAsync().

이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ UploadCoverAsync()

async Task< string > FamiliesApp.Services.LocalMediaService.UploadCoverAsync ( string slug,
IBrowserFile file,
CancellationToken ct = default )
inline

Upload Cover Async 작업을 수행합니다.

매개변수
slugslug에 사용할 string 값입니다.
filefile에 사용할 IBrowserFile 값입니다.
ct취소 요청을 감시하는 토큰입니다.
반환값
Upload Cover Async 작업에서 생성한 Task<string> 결과입니다.
예외
InvalidOperationException현재 객체 상태에서 Upload Cover Async 작업을 수행할 수 없는 경우 발생합니다.

FamiliesApp.Services.IMediaService를 구현.

LocalMediaService.cs 파일의 285 번째 라인에서 정의되었습니다.

286 {
287 var ext = Path.GetExtension(file.Name).ToLowerInvariant();
288 if (!Array.Exists(AllowedImageExts, e => e == ext))
289 throw new InvalidOperationException($"허용되지 않는 이미지 형식입니다: {ext}");
290
291 var (imageLimit, _) = await GetLimitsAsync(slug, ct).ConfigureAwait(false);
292 if (file.Size > imageLimit)
293 throw new InvalidOperationException($"커버 이미지는 {FormatLimit(imageLimit)} 이하여야 합니다.");
294
295 var dir = _tenants.GetTenantDataPath(slug);
296 Directory.CreateDirectory(dir);
297
298 var fileName = $"cover{ext}";
299 await using var dest = File.Create(Path.Combine(dir, fileName));
300 await file.OpenReadStream(imageLimit, ct).CopyToAsync(dest, ct).ConfigureAwait(false);
301
302 var config = await _tenants.GetAsync(slug, ct).ConfigureAwait(false) ?? new Models.FamilyConfig { Slug = slug };
303 config.CoverImageFileName = fileName;
304 await _tenants.SaveAsync(config, ct).ConfigureAwait(false);
305
306 return fileName;
307 }

다음을 참조함 : _tenants, AllowedImageExts, GetLimitsAsync().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ UploadPostMediaAsync()

async Task< string > FamiliesApp.Services.LocalMediaService.UploadPostMediaAsync ( string slug,
string postId,
IBrowserFile file,
CancellationToken ct = default )
inline

Upload Post Media Async 작업을 수행합니다.

매개변수
slugslug에 사용할 string 값입니다.
postIdpost Id에 사용할 string 값입니다.
filefile에 사용할 IBrowserFile 값입니다.
ct취소 요청을 감시하는 토큰입니다.
반환값
Upload Post Media Async 작업에서 생성한 Task<string> 결과입니다.
예외
InvalidOperationException현재 객체 상태에서 Upload Post Media Async 작업을 수행할 수 없는 경우 발생합니다.

FamiliesApp.Services.IMediaService를 구현.

LocalMediaService.cs 파일의 209 번째 라인에서 정의되었습니다.

210 {
211 var ext = Path.GetExtension(file.Name).ToLowerInvariant();
212 bool isVideo = Array.Exists(AllowedVideoExts, e => e == ext);
213 bool isImage = Array.Exists(AllowedImageExts, e => e == ext);
214
215 if (!isVideo && !isImage)
216 throw new InvalidOperationException($"허용되지 않는 파일 형식입니다: {ext}");
217
218 var (imageLimit, videoLimit) = await GetLimitsAsync(slug, ct).ConfigureAwait(false);
219 var limit = isVideo ? videoLimit : imageLimit;
220 if (file.Size > limit)
221 throw new InvalidOperationException(isVideo
222 ? $"동영상은 {FormatLimit(videoLimit)} 이하여야 합니다."
223 : $"이미지는 {FormatLimit(imageLimit)} 이하여야 합니다.");
224
225 var mediaDir = Path.Combine(_tenants.GetTenantDataPath(slug), "media", postId);
226 Directory.CreateDirectory(mediaDir);
227
228 var fileName = $"{DateTime.Now:yyyyMMdd_HHmmss}_{Guid.NewGuid():N}{ext}";
229 var destPath = Path.Combine(mediaDir, fileName);
230
231 await using var dest = File.Create(destPath);
232 await file.OpenReadStream(limit, ct).CopyToAsync(dest, ct).ConfigureAwait(false);
233
234 return fileName;
235 }

다음을 참조함 : _tenants, AllowedImageExts, AllowedVideoExts, GetLimitsAsync().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

멤버 데이터 문서화

◆ _globalSettings

readonly IGlobalSettingsStore FamiliesApp.Services.LocalMediaService._globalSettings
private

global Settings 값을 보관합니다.

LocalMediaService.cs 파일의 34 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : GetLimitsAsync(), LocalMediaService().

◆ _tenants

readonly IFamilyTenantStore FamiliesApp.Services.LocalMediaService._tenants
private

tenants 값을 보관합니다.

LocalMediaService.cs 파일의 25 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : DeletePostMediaAsync(), GetLimitsAsync(), GetPostMediaAsync(), LocalMediaService(), UploadCoverAsync(), UploadPostMediaAsync().

◆ AllowedImageExts

readonly string [] FamiliesApp.Services.LocalMediaService.AllowedImageExts = [".jpg", ".jpeg", ".png", ".webp", ".gif"]
staticprivate

Allowed Image Exts 값을 보관합니다.

LocalMediaService.cs 파일의 44 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : UploadCoverAsync(), UploadPostMediaAsync().

◆ AllowedVideoExts

readonly string [] FamiliesApp.Services.LocalMediaService.AllowedVideoExts = [".mp4", ".webm", ".mov", ".m4v"]
staticprivate

Allowed Video Exts 값을 보관합니다.

LocalMediaService.cs 파일의 53 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : UploadPostMediaAsync().


이 클래스에 대한 문서화 페이지는 다음의 파일로부터 생성되었습니다.: