|
3 | 3 | using DropboxSync.BLL.IServices; |
4 | 4 | using Microsoft.Extensions.Logging; |
5 | 5 | using Newtonsoft.Json; |
6 | | -using Newtonsoft.Json.Linq; |
7 | | -using System; |
8 | | -using System.Collections.Generic; |
9 | | -using System.Linq; |
10 | 6 | using System.Net.Http.Headers; |
11 | | -using System.Net.Http.Json; |
12 | | -using System.Text; |
13 | | -using System.Threading.Tasks; |
| 7 | +using Ionic.Zip; |
14 | 8 |
|
15 | 9 | namespace DropboxSync.BLL.Services |
16 | 10 | { |
@@ -58,7 +52,7 @@ public FileService(ILogger<FileService> logger) |
58 | 52 | /// </summary> |
59 | 53 | /// <param name="fileId">The ID of the file to download</param> |
60 | 54 | /// <returns><see cref="SavedFile"/> object if download and save was successfull. <c>null</c> Otherwise</returns> |
61 | | - public async Task<SavedFile?> DownloadFile(string fileId) |
| 55 | + public async Task<SavedFile?> DownloadFile(string fileId, bool lockFile) |
62 | 56 | { |
63 | 57 | if (string.IsNullOrEmpty(fileId)) throw new ArgumentNullException(nameof(fileId)); |
64 | 58 |
|
@@ -131,14 +125,45 @@ public FileService(ILogger<FileService> logger) |
131 | 125 | return finalOutput; |
132 | 126 | } |
133 | 127 |
|
134 | | - string filePath = Path.Join(FILE_DOWNLOAD_DIR, string.Join('-', fileId, fileName)); |
| 128 | + string filePath; |
| 129 | + FileInfo fileInfo; |
135 | 130 |
|
136 | | - await File.WriteAllBytesAsync(filePath, fileData); |
137 | | - FileInfo fileInfo = new FileInfo(filePath); |
138 | | - if (!fileInfo.Exists) |
| 131 | + if (lockFile) |
139 | 132 | { |
140 | | - _logger.LogError("{date} | File at path \"{filePath}\" doesn't exist!", DateTime.Now, filePath); |
141 | | - return finalOutput; |
| 133 | + string tmpFilePath = Path.Join(FILE_DOWNLOAD_DIR, fileName); |
| 134 | + filePath = Path.Join(FILE_DOWNLOAD_DIR, string.Join('-', fileId, fileName)); |
| 135 | + |
| 136 | + await File.WriteAllBytesAsync(tmpFilePath, fileData); |
| 137 | + fileInfo = new FileInfo(tmpFilePath); |
| 138 | + if (!fileInfo.Exists) |
| 139 | + { |
| 140 | + _logger.LogError("{date} | File at path \"{filePath}\" doesn't exist!", DateTime.Now, tmpFilePath); |
| 141 | + return finalOutput; |
| 142 | + } |
| 143 | + |
| 144 | + string zipPassword = Environment.GetEnvironmentVariable("ZIP_PASSWORD") ?? |
| 145 | + "1234"; |
| 146 | + |
| 147 | + using (ZipFile zip = new ZipFile()) |
| 148 | + { |
| 149 | + zip.Password = zipPassword; |
| 150 | + zip.AddFile(tmpFilePath, ""); |
| 151 | + zip.Save(filePath); |
| 152 | + } |
| 153 | + |
| 154 | + File.Delete(tmpFilePath); |
| 155 | + } |
| 156 | + else |
| 157 | + { |
| 158 | + filePath = Path.Join(FILE_DOWNLOAD_DIR, string.Join('-', fileId, fileName)); |
| 159 | + |
| 160 | + await File.WriteAllBytesAsync(filePath, fileData); |
| 161 | + fileInfo = new FileInfo(filePath); |
| 162 | + if (!fileInfo.Exists) |
| 163 | + { |
| 164 | + _logger.LogError("{date} | File at path \"{filePath}\" doesn't exist!", DateTime.Now, filePath); |
| 165 | + return finalOutput; |
| 166 | + } |
142 | 167 | } |
143 | 168 |
|
144 | 169 | long fileSize = fileInfo.Length; |
|
0 commit comments