Esempio n. 1
0
        public async Task <ActionResult> FileUploads(IFormFileCollection files, CancellationToken cancellationToken = default)
        {
            if (files.Count == 0)
            {
                files = Request.Form.Files;
            }
            if (files.Count == 0)
            {
                return(BadRequest("No files detected"));
            }
            // convert to pdfs
            using var scope = _serviceProvider.CreateScope();
            var pdfProcessor  = scope.ServiceProvider.GetRequiredService <IPdfProcessor>();
            var filesToUpload = await pdfProcessor.RenderPdfs(files, cancellationToken);

            var concurrentCollection = new StreamConcurrentCollection(filesToUpload);
            await _bucketRepository.UploadFiles(_awsSetting.BucketName, concurrentCollection, cancellationToken);

            //TempData["files"] = JsonConvert.SerializeObject(filesToUpload);
            _bucketRepository.Dispose();
            concurrentCollection.Dispose();
            concurrentCollection.Clear();
            var result = filesToUpload.Select(f => f.Name).ToList();

            return(Ok(result));
            //return RedirectToAction("UploadComplete");
        }
Esempio n. 2
0
        public async Task UploadFiles(string bucketName, StreamConcurrentCollection files, CancellationToken cancellationToken)
        {
            try
            {
                var stopWatch = new Stopwatch();
                stopWatch.Start();
                var tasks = files.items.AsParallel()
                            .WithCancellation(cancellationToken)
                            .WithDegreeOfParallelism(5).Select(file =>
                {
                    var request = new TransferUtilityUploadRequest {
                        BucketName = bucketName, InputStream = file.blob, Key = file.Name, AutoCloseStream = true
                    };
                    return(transferUtility.UploadAsync(request, cancellationToken));
                });

                var   finalTask = Task.WhenAll(tasks);
                await finalTask;
                stopWatch.Stop();
                _logger.LogInformation($"{nameof(BucketRepository)} took {stopWatch.ElapsedMilliseconds/1000} sec");
            }
            catch (AmazonS3Exception ex)
            {
                _logger.LogCritical(ex.Message, ex.InnerException);
                throw;
            }
        }