@@ -15,16 +15,16 @@ namespace Passingwind.Abp.FileManagement.Files;
15
15
16
16
public class FileManager : DomainService , IFileManager
17
17
{
18
- private readonly IFileRepository _fileRepository ;
19
- private readonly IFileContainerRepository _fileContainerRepository ;
20
- private readonly IBlobContainerFactory _blobContainerFactor ;
21
- private readonly IFileBlobNameGenerator _fileBlobNameGenerator ;
22
- private readonly IFileHashCalculator _fileHashCalculator ;
23
- private readonly IFileMimeTypeProvider _fileMimeTypeProvider ;
24
- private readonly IFileUniqueIdGenerator _fileUniqueIdGenerator ;
25
- private readonly IFileBlobContainerProvider _fileBlobContainerProvider ;
26
- private readonly IFileDuplicateDetectionProvider _fileDuplicateDetectionProvider ;
27
- private readonly FileManagementOptions _options ;
18
+ private IFileRepository FileRepository { get ; }
19
+ private IFileContainerRepository FileContainerRepository { get ; }
20
+ private IBlobContainerFactory BlobContainerFactor { get ; }
21
+ private IFileBlobNameGenerator FileBlobNameGenerator { get ; }
22
+ private IFileHashCalculator FileHashCalculator { get ; }
23
+ private IFileMimeTypeProvider FileMimeTypeProvider { get ; }
24
+ private IFileUniqueIdGenerator FileUniqueIdGenerator { get ; }
25
+ private IFileBlobContainerProvider FileBlobContainerProvider { get ; }
26
+ private IFileDuplicateDetectionProvider FileDuplicateDetectionProvider { get ; }
27
+ private FileManagementOptions FileManagementOptions { get ; }
28
28
29
29
public FileManager (
30
30
IFileRepository fileRepository ,
@@ -38,19 +38,19 @@ public FileManager(
38
38
IFileDuplicateDetectionProvider fileDuplicateDetectionProvider ,
39
39
IOptions < FileManagementOptions > options )
40
40
{
41
- _fileRepository = fileRepository ;
42
- _fileContainerRepository = fileContainerRepository ;
43
- _blobContainerFactor = blobContainerFactor ;
44
- _fileBlobNameGenerator = fileBlobNameGenerator ;
45
- _fileHashCalculator = fileHashCalculator ;
46
- _fileMimeTypeProvider = fileMimeTypeProvider ;
47
- _fileUniqueIdGenerator = fileUniqueIdGenerator ;
48
- _fileBlobContainerProvider = fileBlobContainerProvider ;
49
- _fileDuplicateDetectionProvider = fileDuplicateDetectionProvider ;
50
- _options = options . Value ;
41
+ FileRepository = fileRepository ;
42
+ FileContainerRepository = fileContainerRepository ;
43
+ BlobContainerFactor = blobContainerFactor ;
44
+ FileBlobNameGenerator = fileBlobNameGenerator ;
45
+ FileHashCalculator = fileHashCalculator ;
46
+ FileMimeTypeProvider = fileMimeTypeProvider ;
47
+ FileUniqueIdGenerator = fileUniqueIdGenerator ;
48
+ FileBlobContainerProvider = fileBlobContainerProvider ;
49
+ FileDuplicateDetectionProvider = fileDuplicateDetectionProvider ;
50
+ FileManagementOptions = options . Value ;
51
51
}
52
52
53
- public async Task < File > FindFileAsync ( FileContainer container , string fileName , Guid ? parentId , CancellationToken cancellationToken = default )
53
+ public virtual async Task < File > FindFileAsync ( FileContainer container , string fileName , Guid ? parentId , CancellationToken cancellationToken = default )
54
54
{
55
55
if ( container is null )
56
56
{
@@ -62,7 +62,7 @@ public async Task<File> FindFileAsync(FileContainer container, string fileName,
62
62
throw new ArgumentException ( $ "'{ nameof ( fileName ) } ' cannot be null or empty.", nameof ( fileName ) ) ;
63
63
}
64
64
65
- return await _fileRepository . FirstOrDefaultAsync ( x => x . FileName == fileName && x . ParentId == parentId && x . ContainerId == container . Id && ! x . IsDirectory ) ;
65
+ return await FileRepository . FirstOrDefaultAsync ( x => x . FileName == fileName && x . ParentId == parentId && x . ContainerId == container . Id && ! x . IsDirectory ) ;
66
66
}
67
67
68
68
public virtual async Task < bool > IsFileExistsAsync ( FileContainer container , File file , CancellationToken cancellationToken = default )
@@ -80,7 +80,7 @@ public virtual async Task<bool> IsFileExistsAsync(FileContainer container, File
80
80
if ( file . IsDirectory )
81
81
throw new ArgumentException ( ) ;
82
82
83
- return await _fileDuplicateDetectionProvider . IsExistsAsync ( container , file , cancellationToken ) ;
83
+ return await FileDuplicateDetectionProvider . IsExistsAsync ( container , file , cancellationToken ) ;
84
84
}
85
85
86
86
public virtual async Task < bool > IsDirectoryExistsAsync ( FileContainer container , File file , CancellationToken cancellationToken = default )
@@ -98,7 +98,7 @@ public virtual async Task<bool> IsDirectoryExistsAsync(FileContainer container,
98
98
if ( ! file . IsDirectory )
99
99
throw new ArgumentException ( ) ;
100
100
101
- return await _fileDuplicateDetectionProvider . IsExistsAsync ( container , file , cancellationToken ) ;
101
+ return await FileDuplicateDetectionProvider . IsExistsAsync ( container , file , cancellationToken ) ;
102
102
}
103
103
104
104
public virtual Task CheckFileExtensionAsync ( FileContainer container , File file , CancellationToken cancellationToken = default )
@@ -180,7 +180,7 @@ public virtual async Task CheckFileExistsAsync(FileContainer container, File fil
180
180
}
181
181
}
182
182
183
- public async Task CheckDirectoryExistsAsync ( FileContainer container , File entity , CancellationToken cancellationToken = default )
183
+ public virtual async Task CheckDirectoryExistsAsync ( FileContainer container , File entity , CancellationToken cancellationToken = default )
184
184
{
185
185
if ( container is null )
186
186
{
@@ -221,11 +221,11 @@ public virtual async Task<File> CreateFileAsync(FileContainer container, string
221
221
throw new ArgumentNullException ( nameof ( bytes ) ) ;
222
222
}
223
223
224
- var hash = await _fileHashCalculator . GetAsync ( bytes ) ;
224
+ var hash = await FileHashCalculator . GetAsync ( bytes ) ;
225
225
226
226
var fileId = GuidGenerator . Create ( ) ;
227
- var uniqueId = await _fileUniqueIdGenerator . CreateAsync ( container , fileId ) ;
228
- var blobName = await _fileBlobNameGenerator . CreateAsync ( container . Id , fileId , uniqueId , fileName , mimeType , bytes . Length , hash ) ;
227
+ var uniqueId = await FileUniqueIdGenerator . CreateAsync ( container , fileId ) ;
228
+ var blobName = await FileBlobNameGenerator . CreateAsync ( container . Id , fileId , uniqueId , fileName , mimeType , bytes . Length , hash ) ;
229
229
230
230
var file = new File (
231
231
fileId ,
@@ -243,7 +243,7 @@ public virtual async Task<File> CreateFileAsync(FileContainer container, string
243
243
return file ;
244
244
}
245
245
246
- public async Task < File > CreateDirectoryAsync ( FileContainer container , string name , Guid ? parentId , CancellationToken cancellationToken = default )
246
+ public virtual async Task < File > CreateDirectoryAsync ( FileContainer container , string name , Guid ? parentId , CancellationToken cancellationToken = default )
247
247
{
248
248
if ( container is null )
249
249
{
@@ -256,8 +256,8 @@ public async Task<File> CreateDirectoryAsync(FileContainer container, string nam
256
256
}
257
257
258
258
var fileId = GuidGenerator . Create ( ) ;
259
- var uniqueId = await _fileUniqueIdGenerator . CreateAsync ( container , fileId ) ;
260
- var blobName = await _fileBlobNameGenerator . CreateAsync ( container . Id , fileId , uniqueId , name , string . Empty , 0 , string . Empty ) ;
259
+ var uniqueId = await FileUniqueIdGenerator . CreateAsync ( container , fileId ) ;
260
+ var blobName = await FileBlobNameGenerator . CreateAsync ( container . Id , fileId , uniqueId , name , string . Empty , 0 , string . Empty ) ;
261
261
262
262
var file = new File (
263
263
fileId ,
@@ -309,7 +309,7 @@ public virtual async Task<byte[]> GetFileBytesAsync(FileContainer container, Fil
309
309
throw new ArgumentNullException ( nameof ( file ) ) ;
310
310
}
311
311
312
- var blobContainer = await _fileBlobContainerProvider . GetAsync ( container ) ;
312
+ var blobContainer = await FileBlobContainerProvider . GetAsync ( container ) ;
313
313
314
314
return await blobContainer . GetAllBytesOrNullAsync ( file . BlobName , cancellationToken ) ;
315
315
}
@@ -326,7 +326,7 @@ public virtual async Task<byte[]> GetFileBytesAsync(FileContainer container, Fil
326
326
throw new ArgumentNullException ( nameof ( file ) ) ;
327
327
}
328
328
329
- var blobContainer = await _fileBlobContainerProvider . GetAsync ( container ) ;
329
+ var blobContainer = await FileBlobContainerProvider . GetAsync ( container ) ;
330
330
331
331
return await blobContainer . GetOrNullAsync ( file . BlobName , cancellationToken ) ;
332
332
}
@@ -348,7 +348,7 @@ public virtual async Task SaveBlobAsync(FileContainer container, File file, Stre
348
348
throw new ArgumentNullException ( nameof ( stream ) ) ;
349
349
}
350
350
351
- var blobContainer = await _fileBlobContainerProvider . GetAsync ( container ) ;
351
+ var blobContainer = await FileBlobContainerProvider . GetAsync ( container ) ;
352
352
353
353
await blobContainer . SaveAsync ( file . BlobName , stream , true , cancellationToken ) ;
354
354
}
@@ -370,12 +370,12 @@ public virtual async Task SaveBlobAsync(FileContainer container, File file, byte
370
370
throw new ArgumentNullException ( nameof ( bytes ) ) ;
371
371
}
372
372
373
- var blobContainer = await _fileBlobContainerProvider . GetAsync ( container ) ;
373
+ var blobContainer = await FileBlobContainerProvider . GetAsync ( container ) ;
374
374
375
375
await blobContainer . SaveAsync ( file . BlobName , bytes , true , cancellationToken ) ;
376
376
}
377
377
378
- public async Task < File > ChangeFileNameAsync ( FileContainer container , File file , string newName , Guid ? parentId , CancellationToken cancellationToken = default )
378
+ public virtual async Task < File > ChangeFileNameAsync ( FileContainer container , File file , string newName , Guid ? parentId , CancellationToken cancellationToken = default )
379
379
{
380
380
if ( container == null )
381
381
throw new ArgumentNullException ( nameof ( container ) ) ;
@@ -392,43 +392,62 @@ public async Task<File> ChangeFileNameAsync(FileContainer container, File file,
392
392
file . SetFileName ( newName ) ;
393
393
394
394
if ( ! file . IsDirectory )
395
- file . UpdateMimeType ( _fileMimeTypeProvider . Get ( newName ) ) ;
395
+ file . UpdateMimeType ( FileMimeTypeProvider . Get ( newName ) ) ;
396
396
397
397
await CheckFileExtensionAsync ( container , file ) ;
398
398
399
399
return file ;
400
400
}
401
401
402
402
[ UnitOfWork ]
403
- public async Task DeleteAsync ( FileContainer container , File file , CancellationToken cancellationToken = default )
403
+ public virtual async Task DeleteAsync ( FileContainer container , File file , CancellationToken cancellationToken = default )
404
404
{
405
- await _fileRepository . DeleteAsync ( file ) ;
405
+ await FileRepository . DeleteAsync ( file ) ;
406
406
407
407
if ( container . AutoDeleteBlob && ! file . IsDirectory )
408
408
{
409
- var blobContainer = await _fileBlobContainerProvider . GetAsync ( container , cancellationToken : cancellationToken ) ;
409
+ var blobContainer = await FileBlobContainerProvider . GetAsync ( container , cancellationToken : cancellationToken ) ;
410
410
411
411
await blobContainer . DeleteAsync ( file . BlobName , cancellationToken ) ;
412
412
}
413
413
}
414
414
415
415
[ UnitOfWork ]
416
- public async Task ClearContainerFilesAsync ( FileContainer container , CancellationToken cancellationToken = default )
416
+ public virtual async Task ClearContainerFilesAsync ( FileContainer container , CancellationToken cancellationToken = default )
417
417
{
418
418
// TODO: performance
419
419
420
- var files = await _fileRepository . GetListAsync ( containerId : container . Id , cancellationToken : cancellationToken ) ;
420
+ var files = await FileRepository . GetListAsync ( containerId : container . Id , cancellationToken : cancellationToken ) ;
421
421
422
422
foreach ( var file in files )
423
423
{
424
- await _fileRepository . DeleteAsync ( file ) ;
424
+ await FileRepository . DeleteAsync ( file ) ;
425
425
426
426
if ( container . AutoDeleteBlob && ! file . IsDirectory )
427
427
{
428
- var blobContainer = await _fileBlobContainerProvider . GetAsync ( container , cancellationToken : cancellationToken ) ;
428
+ var blobContainer = await FileBlobContainerProvider . GetAsync ( container , cancellationToken : cancellationToken ) ;
429
429
430
430
await blobContainer . DeleteAsync ( file . BlobName , cancellationToken ) ;
431
431
}
432
432
}
433
433
}
434
+
435
+ public async Task < byte [ ] > GetFileBytesByFileIdAsync ( string containerName , Guid id , CancellationToken cancellationToken = default )
436
+ {
437
+ var container = await FileContainerRepository . GetByNameAsync ( containerName , cancellationToken ) ;
438
+ var file = await FileRepository . GetAsync ( id , cancellationToken : cancellationToken ) ;
439
+ return await GetFileBytesAsync ( container , file , cancellationToken ) ;
440
+ }
441
+
442
+ public async Task < Stream ? > GetFileSteamByFileIdAsync ( string containerName , Guid id , CancellationToken cancellationToken = default )
443
+ {
444
+ var container = await FileContainerRepository . GetByNameAsync ( containerName , cancellationToken ) ;
445
+ var file = await FileRepository . GetAsync ( id , cancellationToken : cancellationToken ) ;
446
+ return await GetFileSteamAsync ( container , file , cancellationToken ) ;
447
+ }
448
+
449
+ public async Task < File > GetByIdAsync ( string containerName , Guid id , CancellationToken cancellationToken = default )
450
+ {
451
+ return await FileRepository . GetAsync ( id , cancellationToken : cancellationToken ) ;
452
+ }
434
453
}
0 commit comments