public async Task <IActionResult> CreateTemporaryFileUrl(string fileId,
                                                                 CreateTemporaryFileUrlViewModel viewModel)
        {
            if (viewModel.TimeAmount <= 0)
            {
                ModelState.AddModelError(nameof(viewModel.TimeAmount), "Time must be at least 1");
            }

            if (!ModelState.IsValid)
            {
                return(View(viewModel));
            }

            var file = await _StoredFileRepository.GetFile(fileId);

            if (file == null)
            {
                return(NotFound());
            }

            var expiry = DateTimeOffset.UtcNow;

            switch (viewModel.TimeType)
            {
            case CreateTemporaryFileUrlViewModel.TmpFileTimeType.Seconds:
                expiry = expiry.AddSeconds(viewModel.TimeAmount);
                break;

            case CreateTemporaryFileUrlViewModel.TmpFileTimeType.Minutes:
                expiry = expiry.AddMinutes(viewModel.TimeAmount);
                break;

            case CreateTemporaryFileUrlViewModel.TmpFileTimeType.Hours:
                expiry = expiry.AddHours(viewModel.TimeAmount);
                break;

            case CreateTemporaryFileUrlViewModel.TmpFileTimeType.Days:
                expiry = expiry.AddDays(viewModel.TimeAmount);
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            var url = await _FileService.GetTemporaryFileUrl(Request.GetAbsoluteRootUri(), fileId, expiry, viewModel.IsDownload);

            return(RedirectToAction(nameof(Files), new
            {
                StatusMessage = new StatusMessageModel()
                {
                    Severity = StatusMessageModel.StatusSeverity.Success,
                    Html =
                        $"Generated Temporary Url for file {file.FileName} which expires at {expiry.ToBrowserDate()}. <a href='{url}' target='_blank'>{url}</a>"
                }.ToString(),
                fileId,
            }));
        }
예제 #2
0
        public async Task <IActionResult> CreateTemporaryFileUrl(string fileId,
                                                                 CreateTemporaryFileUrlViewModel viewModel)
        {
            if (viewModel.TimeAmount <= 0)
            {
                ModelState.AddModelError(nameof(viewModel.TimeAmount), "El tiempo debe ser al menos 1");
            }

            if (!ModelState.IsValid)
            {
                return(View(viewModel));
            }

            var file = await _StoredFileRepository.GetFile(fileId);

            if (file == null)
            {
                return(NotFound());
            }

            var expiry = DateTimeOffset.UtcNow;

            switch (viewModel.TimeType)
            {
            case CreateTemporaryFileUrlViewModel.TmpFileTimeType.Seconds:
                expiry = expiry.AddSeconds(viewModel.TimeAmount);
                break;

            case CreateTemporaryFileUrlViewModel.TmpFileTimeType.Minutes:
                expiry = expiry.AddMinutes(viewModel.TimeAmount);
                break;

            case CreateTemporaryFileUrlViewModel.TmpFileTimeType.Hours:
                expiry = expiry.AddHours(viewModel.TimeAmount);
                break;

            case CreateTemporaryFileUrlViewModel.TmpFileTimeType.Days:
                expiry = expiry.AddDays(viewModel.TimeAmount);
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            var url = await _FileService.GetTemporaryFileUrl(fileId, expiry, viewModel.IsDownload);

            return(RedirectToAction(nameof(Files), new
            {
                StatusMessage = new StatusMessageModel()
                {
                    Html =
                        $"Url temporal generado para archivo {file.FileName} que expira a las {expiry.ToBrowserDate()}. <a href='{url}' target='_blank'>{url}</a>"
                }.ToString(),
                fileId,
            }));
        }