Merge pull request #2992 from sbwalker/dev
refactored upload so that it is not dependent on Folder Browse permission
This commit is contained in:
		| @ -329,27 +329,29 @@ | ||||
|                     var folder = (Folder == Constants.PackagesFolder) ? Folder : FolderId.ToString(); | ||||
|                     await interop.UploadFiles(posturl, folder, _guid, SiteState.AntiForgeryToken); | ||||
|  | ||||
|                     // uploading is asynchronous so we need to wait for the uploads to complete | ||||
|                     // note that this will only wait a maximum of 15 seconds which may not be long enough for very large file uploads | ||||
|                     bool success = false; | ||||
|                     int attempts = 0; | ||||
|                     while (attempts < 5 && !success) | ||||
|                     // uploading is asynchronous so we need to poll to determine if uploads are completed | ||||
|                     var success = true; | ||||
|                     int upload = 0; | ||||
|                     while (upload < uploads.Length && success) | ||||
|                     { | ||||
|                         attempts += 1; | ||||
|                         Thread.Sleep(1000 * attempts); // progressive retry  | ||||
|  | ||||
|                         success = true; | ||||
|                         List<File> files = await FileService.GetFilesAsync(folder); | ||||
|                         if (files.Count > 0) | ||||
|                         success = false; | ||||
|                         // note that progressive retry will only wait a maximum of 15 seconds which may not be long enough for very large file uploads | ||||
|                         int attempts = 0; | ||||
|                         while (attempts < 5 && !success) | ||||
|                         { | ||||
|                             foreach (string upload in uploads) | ||||
|                             attempts += 1; | ||||
|                             Thread.Sleep(1000 * attempts); // progressive retry | ||||
|  | ||||
|                             var file = await FileService.GetFileAsync(int.Parse(folder), uploads[upload]); | ||||
|                             if (file != null) | ||||
|                             { | ||||
|                                 if (!files.Exists(item => item.Name == upload)) | ||||
|                                 { | ||||
|                                     success = false; | ||||
|                                 } | ||||
|                                 success = true; | ||||
|                             } | ||||
|                         } | ||||
|                         if (success) | ||||
|                         { | ||||
|                             upload++; | ||||
|                         } | ||||
|                     } | ||||
|  | ||||
|                     // reset progress indicators | ||||
| @ -379,14 +381,14 @@ | ||||
|                     else | ||||
|                     { | ||||
|                         // set FileId to first file in upload collection | ||||
|                         await GetFiles(); | ||||
|                         var file = _files.Where(item => item.Name == uploads[0]).FirstOrDefault(); | ||||
|                         var file = await FileService.GetFileAsync(int.Parse(folder), uploads[0]); | ||||
|                         if (file != null) | ||||
|                         { | ||||
|                             FileId = file.FileId; | ||||
|                             await SetImage(); | ||||
|                             await OnUpload.InvokeAsync(FileId); | ||||
|                         } | ||||
|                         await GetFiles(); | ||||
|                         StateHasChanged(); | ||||
|                     } | ||||
|                 } | ||||
|  | ||||
| @ -139,9 +139,13 @@ namespace Oqtane.Controllers | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 _logger.Log(LogLevel.Error, this, LogFunction.Security, "Unauthorized File Get Attempt {Name} For Folder {FolderId}", name, folderId); | ||||
|                 HttpContext.Response.StatusCode = (int)HttpStatusCode.Forbidden; | ||||
|                 return null; | ||||
|                 if (file != null) | ||||
|                 { | ||||
|                     _logger.Log(LogLevel.Error, this, LogFunction.Security, "Unauthorized File Get Attempt {Name} For Folder {FolderId}", name, folderId); | ||||
|                     HttpContext.Response.StatusCode = (int)HttpStatusCode.Forbidden; | ||||
|                     file = null; | ||||
|                 } | ||||
|                 return file; | ||||
|             } | ||||
|         } | ||||
|  | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 Shaun Walker
					Shaun Walker