Example #1
0
            public async Task <Response> Handle(Request request, CancellationToken cancellationToken)
            {
                var httpContext        = _httpContextAccessor.HttpContext;
                var defaultFormOptions = new FormOptions();
                var digitalAssets      = new List <DigitalAsset>();

                if (!MultipartRequestHelper.IsMultipartContentType(httpContext.Request.ContentType))
                {
                    throw new Exception($"Expected a multipart request, but got {httpContext.Request.ContentType}");
                }

                var mediaTypeHeaderValue = MediaTypeHeaderValue.Parse(httpContext.Request.ContentType);

                var boundary = MultipartRequestHelper.GetBoundary(
                    mediaTypeHeaderValue,
                    defaultFormOptions.MultipartBoundaryLengthLimit);

                var reader = new MultipartReader(boundary, httpContext.Request.Body);

                var section = await reader.ReadNextSectionAsync();

                while (section != null)
                {
                    var digitalAsset = new DigitalAsset();

                    var hasContentDispositionHeader = ContentDispositionHeaderValue.TryParse(section.ContentDisposition, out ContentDispositionHeaderValue contentDisposition);

                    if (hasContentDispositionHeader)
                    {
                        if (MultipartRequestHelper.HasFileContentDisposition(contentDisposition))
                        {
                            using (var targetStream = new MemoryStream())
                            {
                                await section.Body.CopyToAsync(targetStream);

                                digitalAsset.Name        = $"{contentDisposition.FileName}".Trim(new char[] { '"' }).Replace("&", "and");
                                digitalAsset.Bytes       = StreamHelper.ReadToEnd(targetStream);
                                digitalAsset.ContentType = section.ContentType;
                            }
                        }
                    }

                    _context.DigitalAssets.Add(digitalAsset);

                    digitalAssets.Add(digitalAsset);

                    section = await reader.ReadNextSectionAsync();
                }

                await _context.SaveChangesAsync(cancellationToken);

                return(new Response()
                {
                    DigitalAssetIds = digitalAssets.Select(x => x.DigitalAssetId).ToList()
                });
            }
Example #2
0
        /// <summary>
        /// Called when [action executing].
        /// </summary>
        /// <param name="context">The context.</param>
        public override void OnActionExecuting(ActionExecutingContext context)
        {
            if (!MultipartRequestHelper.IsMultipartContentType(context.HttpContext.Request.ContentType))
            {
                context.Result = new StatusCodeResult(StatusCodes.Status400BadRequest);
                return;
            }

            base.OnActionExecuting(context);
        }
Example #3
0
        public void MultipartRequestHelperTest_HasFileContentDisposition()
        {
            var formdata =
                new Microsoft.Net.Http.Headers.ContentDispositionHeaderValue("form-data");

            formdata.FileName     = "test";
            formdata.FileNameStar = "1";
            Assert.AreEqual("form-data; filename=test; filename*=UTF-8''1", formdata.ToString());
            Assert.AreEqual(true, MultipartRequestHelper.HasFileContentDisposition(formdata));
        }
        public async Task <FileDto> UploadAsync(IFormFile file, int key = 0)
        {
            if (!MultipartRequestHelper.IsMultipartContentType(Request.ContentType))
            {
                throw new LinCmsException($"The request couldn't be processed (Error 1).");
            }

            this.ValidFile(file);
            return(await _fileService.UploadAsync(file, key));
        }
 public FilesController(MultipartRequestHelper multipartRequestHelper,
                        IMongoStreamer mongoStreamer,
                        ILogger <FilesController> logger,
                        IFilesRepository filesRepository)
 {
     _mongoStreamer          = mongoStreamer;
     _multipartRequestHelper = multipartRequestHelper;
     _logger          = logger;
     _filesRepository = filesRepository;
 }
Example #6
0
        public async Task <ActionResult <List <UploadedTempFile> > > Upload()
        {
            if (!MultipartRequestHelper.IsMultipartContentType(Request.ContentType))
            {
                return(BadRequest($"Expected a multipart request, but got {Request.ContentType}"));
            }
            var filesAndFormData = await ParseMultipartRequest();

            return(filesAndFormData.Files);
        }
Example #7
0
        public async Task <ActionResult <BlobInfo[]> > UploadAssetToLocalFileSystemAsync()
        {
            //ToDo Now supports downloading one file, find a solution for downloading multiple files
            // https://docs.microsoft.com/en-us/aspnet/core/mvc/models/file-uploads?view=aspnetcore-3.1
            var result = new List <BlobInfo>();

            if (!MultipartRequestHelper.IsMultipartContentType(Request.ContentType))
            {
                return(BadRequest($"Expected a multipart request, but got {Request.ContentType}"));
            }
            var uploadPath = Path.GetFullPath(_platformOptions.LocalUploadFolderPath);

            if (!Directory.Exists(uploadPath))
            {
                Directory.CreateDirectory(uploadPath);
            }

            var boundary = MultipartRequestHelper.GetBoundary(MediaTypeHeaderValue.Parse(Request.ContentType), _defaultFormOptions.MultipartBoundaryLengthLimit);
            var reader   = new MultipartReader(boundary, HttpContext.Request.Body);

            var section = await reader.ReadNextSectionAsync();

            if (section != null)
            {
                var hasContentDispositionHeader = ContentDispositionHeaderValue.TryParse(section.ContentDisposition, out var contentDisposition);

                if (hasContentDispositionHeader)
                {
                    if (MultipartRequestHelper.HasFileContentDisposition(contentDisposition))
                    {
                        var fileName       = contentDisposition.FileName.Value;
                        var targetFilePath = Path.Combine(uploadPath, fileName);

                        if (!Directory.Exists(uploadPath))
                        {
                            Directory.CreateDirectory(uploadPath);
                        }

                        using (var targetStream = System.IO.File.Create(targetFilePath))
                        {
                            await section.Body.CopyToAsync(targetStream);
                        }

                        var blobInfo = AbstractTypeFactory <BlobInfo> .TryCreateInstance();

                        blobInfo.Name = fileName;
                        //Use only file name as Url, for further access to these files need use PlatformOptions.LocalUploadFolderPath
                        blobInfo.Url         = fileName;
                        blobInfo.ContentType = MimeTypeResolver.ResolveContentType(fileName);
                        result.Add(blobInfo);
                    }
                }
            }
            return(Ok(result.ToArray()));
        }
        public async Task <SaveAudioResult> SaveAudioWithData()
        {
            var boundary = MultipartRequestHelper.GetBoundary(Request.ContentType);

            if (!MultipartRequestHelper.IsMultipartContentType(Request.ContentType) || boundary == null)
            {
                return(SaveAudioResult.UploadingError);
            }

            return(await fcMomentsService.SaveAudioWithDataAsync(HttpContext.Request.Body, boundary));
        }
Example #9
0
        public void MultipartRequestHelperTest_boundarySucces()
        {
            var mediaType =
                new Microsoft.Net.Http.Headers.MediaTypeHeaderValue("plain/text")
            {
                Boundary = new StringSegment("test")
            };
            var boundary = MultipartRequestHelper.GetBoundary(mediaType, 10);

            Assert.AreEqual("test", boundary);
        }
        public async Task SaveAudio(long instanceId, long campaignId, long importNumber)
        {
            var boundary = MultipartRequestHelper.GetBoundary(Request.ContentType);

            if (!MultipartRequestHelper.IsMultipartContentType(Request.ContentType) || boundary == null)
            {
                return;
            }

            await transcriptionService.SaveAudioFileAsync(HttpContext.Request.Body, boundary, instanceId, campaignId, importNumber);
        }
        public static async Task <LocalMultipartFormData> CreateAsync(HttpRequest request, string folderPath,
                                                                      Func <string, MultipartSection, MultipartFileInfo, Task <string> > fileHandle)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }

            if (!MultipartRequestHelper.IsMultipartContentType(request.ContentType))
            {
                throw new InvalidDataException("Request is not a multipart request");
            }

            var files           = new List <LocalMultipartFileInfo>();
            var formAccumulator = new KeyValueAccumulator();
            var reader          = GetMultipartReader(request);

            var section = await reader.ReadNextSectionAsync();

            while (section != null)
            {
                var hasContentDispositionHeader =
                    ContentDispositionHeaderValue.TryParse(
                        section.ContentDisposition,
                        out ContentDispositionHeaderValue contentDisposition);

                if (hasContentDispositionHeader)
                {
                    if (MultipartRequestHelper.HasFileContentDisposition(contentDisposition))
                    {
                        var formFile = new MultipartFileInfo {
                            Name     = section.AsFileSection().Name,
                            FileName = section.AsFileSection().FileName,
                            Length   = section.Body.Length
                        };

                        var savingPath = await fileHandle(folderPath, section, formFile);

                        files.Add(new LocalMultipartFileInfo(formFile)
                        {
                            TemporaryLocation = savingPath
                        });
                    }
                    else if (MultipartRequestHelper.HasFormDataContentDisposition(contentDisposition))
                    {
                        formAccumulator = await AccumulateForm(formAccumulator, section, contentDisposition);
                    }
                }

                section = await reader.ReadNextSectionAsync();
            }

            return(new LocalMultipartFormData(formAccumulator.GetResults(), files));
        }
        public async Task <IActionResult> CreateGroupAsync(Guid adminUserId, CancellationToken cancellationToken)
        {
            if (Request.ContentType != null && !MultipartRequestHelper.IsMultipartContentType(Request.ContentType))
            {
                return(BadRequest("The data submitted is not in the multiform format"));
            }

            await _adminGroupService.CreateGroupAsync(adminUserId, Request.Body, Request.ContentType, cancellationToken);

            return(Ok());
        }
Example #13
0
        public async Task <IActionResult> UpdateGroupAsync(string slug, Guid userId, CancellationToken cancellationToken)
        {
            if (Request.ContentType != null && !MultipartRequestHelper.IsMultipartContentType(Request.ContentType))
            {
                return(BadRequest("The data submitted is not in the multiform format"));
            }
            var rowVersion = _etagService.GetIfMatch();
            await _groupService.UpdateGroupMultipartDocument(userId, slug, rowVersion, Request.Body, Request.ContentType, cancellationToken);

            return(Ok());
        }
Example #14
0
        public async Task <IActionResult> UploadImageLarge()
        {
            try
            {
                if (!MultipartRequestHelper.IsMultipartContentType(Request.ContentType))
                {
                    return(BadRequest(string.Format(MessagesConstants.ExpectedDifferentRequest, Request.ContentType)));
                }
                // Used to accumulate all the form url encoded key value pairs in the
                // request.
                var    formAccumulator = new KeyValueAccumulator();
                string targetFilePath  = null;

                var boundary = MultipartRequestHelper.GetBoundary(
                    MediaTypeHeaderValue.Parse(Request.ContentType),
                    _defaultFormOptions.MultipartBoundaryLengthLimit);
                var reader = new MultipartReader(boundary, HttpContext.Request.Body);

                var section = await reader.ReadNextSectionAsync();

                while (section != null)
                {
                    ContentDispositionHeaderValue contentDisposition;
                    var hasContentDispositionHeader = ContentDispositionHeaderValue.TryParse(section.ContentDisposition, out contentDisposition);

                    if (hasContentDispositionHeader)
                    {
                        if (MultipartRequestHelper.HasFileContentDisposition(contentDisposition))
                        {
                            targetFilePath = Path.GetTempFileName();
                            using (var targetStream = System.IO.File.Create(targetFilePath))
                            {
                                await section.Body.CopyToAsync(targetStream);
                            }
                        }
                        else if (MultipartRequestHelper.HasFormDataContentDisposition(contentDisposition))
                        {
                            formAccumulator = await UploadImageLargeRefactor(formAccumulator, section, contentDisposition);
                        }
                    }

                    // Drains any remaining section body that has not been consumed and
                    // reads the headers for the next section.
                    section = await reader.ReadNextSectionAsync();
                }

                return(Ok(new ApiResponse(Microsoft.AspNetCore.Http.StatusCodes.Status200OK, true, "Image Uploaded Successfully.", targetFilePath)));
            }
            catch (Exception ex)
            {
                HttpContext.RiseError(new Exception(string.Concat("API := (Image := UploadImageLarge)", ex.Message, " Stack Trace : ", ex.StackTrace, " Inner Exception : ", ex.InnerException)));
                return(Ok(someIssueInProcessing));
            }
        }
Example #15
0
        public async Task <IActionResult> UploadDocumentStream(Guid userId, string slug, Guid folderId, CancellationToken cancellationToken)
        {
            if (Request.ContentType != null && !MultipartRequestHelper.IsMultipartContentType(Request.ContentType))
            {
                return(BadRequest("The data submitted is not in the multiform format"));
            }

            await _fileService.UploadFileMultipartDocument(userId, slug, folderId, HttpContext.Request.Body, HttpContext.Request.ContentType, cancellationToken);

            return(Ok());
        }
        public async Task <SaveExaminationAudioResult> SaveExaminationAudio()
        {
            var boundary = MultipartRequestHelper.GetBoundary(Request.ContentType);

            if (!MultipartRequestHelper.IsMultipartContentType(Request.ContentType) || boundary == null)
            {
                return(SaveExaminationAudioResult.Error);
            }

            return(await examinationAudioService.SaveAsync(HttpContext.Request.Body, boundary));
        }
Example #17
0
        public async Task <IActionResult> UploadB()
        {
            if (!MultipartRequestHelper.IsMultipartContentType(Request.ContentType))
            {
                return(BadRequest("WTF"));
            }
            var formAccumulator = new KeyValueAccumulator();
            var boundary        = MultipartRequestHelper.GetBoundary(MediaTypeHeaderValue.Parse(Request.ContentType), 10000);
            var reader          = new MultipartReader(boundary, HttpContext.Request.Body);
            var section         = await reader.ReadNextSectionAsync();

            while (section != null)
            {
                var hasContentDispositionHeader = ContentDispositionHeaderValue.TryParse(section.ContentDisposition, out var contentDisposition);
                if (hasContentDispositionHeader)
                {
                    if (MultipartRequestHelper.HasFileContentDisposition(contentDisposition))
                    {
                        var targetFilePath = (Path.Combine(tempPath, Guid.NewGuid().ToString("N") + ".pdf"));
                        using (var targetStream = System.IO.File.Create(targetFilePath)) {
                            await section.Body.CopyToAsync(targetStream);
                        }
                    }
                    else if (false && MultipartRequestHelper.HasFormDataContentDisposition(contentDisposition))
                    {
                        var key      = HeaderUtilities.RemoveQuotes(contentDisposition.Name);
                        var encoding = GetEncoding(section);
                        using (var streamReader = new StreamReader(
                                   section.Body,
                                   encoding,
                                   detectEncodingFromByteOrderMarks: true,
                                   bufferSize: 1024,
                                   leaveOpen: true
                                   )) {
                            var value = await streamReader.ReadToEndAsync();

                            if (String.Equals(value, "undefined", StringComparison.OrdinalIgnoreCase))
                            {
                                value = string.Empty;
                            }
                            formAccumulator.Append(key.ToString(), value);

                            if (formAccumulator.ValueCount > 100)
                            {
                                throw new InvalidDataException("Form WTF");
                            }
                        }
                    }
                }
                section = await reader.ReadNextSectionAsync();
            }
            return(Ok(new { Success = true }));
        }
Example #18
0
        public static async System.Threading.Tasks.Task <ICollection <DigitalAsset> > Upload(IHttpContextAccessor httpContextAccessor, IAppDbContext context, CancellationToken cancellationToken)
        {
            var httpContext        = httpContextAccessor.HttpContext;
            var defaultFormOptions = new FormOptions();
            var digitalAssets      = new List <DigitalAsset>();

            if (!MultipartRequestHelper.IsMultipartContentType(httpContext.Request.ContentType))
            {
                throw new Exception($"Expected a multipart request, but got {httpContext.Request.ContentType}");
            }

            var mediaTypeHeaderValue = MediaTypeHeaderValue.Parse(httpContext.Request.ContentType);

            var boundary = MultipartRequestHelper.GetBoundary(
                mediaTypeHeaderValue,
                defaultFormOptions.MultipartBoundaryLengthLimit);

            var reader = new MultipartReader(boundary, httpContext.Request.Body);

            var section = await reader.ReadNextSectionAsync();

            while (section != null)
            {
                var hasContentDispositionHeader = ContentDispositionHeaderValue.TryParse(section.ContentDisposition, out ContentDispositionHeaderValue contentDisposition);

                if (hasContentDispositionHeader)
                {
                    if (MultipartRequestHelper.HasFileContentDisposition(contentDisposition))
                    {
                        using (var targetStream = new MemoryStream())
                        {
                            await section.Body.CopyToAsync(targetStream, cancellationToken);

                            var name        = $"{contentDisposition.FileName}".Trim(new char[] { '"' }).Replace("&", "and");
                            var bytes       = StreamHelper.ReadToEnd(targetStream);
                            var contentType = section.ContentType;

                            var digitalAsset = new DigitalAsset(name, bytes, contentType);

                            context.Store(digitalAsset);

                            digitalAssets.Add(digitalAsset);
                        }
                    }
                }

                section = await reader.ReadNextSectionAsync(cancellationToken);
            }

            await context.SaveChangesAsync(cancellationToken);

            return(digitalAssets);
        }
Example #19
0
        /// <summary>
        /// Creates a data element by reading the first multipart element or body of the request.
        /// </summary>
        private async Task <(Stream Stream, DataElement DataElement)> ReadRequestAndCreateDataElementAsync(HttpRequest request, string elementType, List <Guid> refs, Instance instance)
        {
            DateTime creationTime = DateTime.UtcNow;
            Stream   theStream;

            string contentType;
            string contentFileName = null;
            long   fileSize        = 0;

            if (MultipartRequestHelper.IsMultipartContentType(request.ContentType))
            {
                // Only read the first section of the Multipart message.
                MediaTypeHeaderValue mediaType = MediaTypeHeaderValue.Parse(request.ContentType);
                string boundary = MultipartRequestHelper.GetBoundary(mediaType, _defaultFormOptions.MultipartBoundaryLengthLimit);

                MultipartReader  reader  = new MultipartReader(boundary, request.Body);
                MultipartSection section = await reader.ReadNextSectionAsync();

                theStream   = section.Body;
                contentType = section.ContentType;

                bool hasContentDisposition = ContentDispositionHeaderValue.TryParse(section.ContentDisposition, out ContentDispositionHeaderValue contentDisposition);

                if (hasContentDisposition)
                {
                    contentFileName = HttpUtility.UrlDecode(contentDisposition.GetFilename());
                    fileSize        = contentDisposition.Size ?? 0;
                }
            }
            else
            {
                theStream = request.Body;
                if (request.Headers.TryGetValue("Content-Disposition", out StringValues headerValues))
                {
                    bool hasContentDisposition = ContentDispositionHeaderValue.TryParse(headerValues.ToString(), out ContentDispositionHeaderValue contentDisposition);

                    if (hasContentDisposition)
                    {
                        contentFileName = HttpUtility.UrlDecode(contentDisposition.GetFilename());
                        fileSize        = contentDisposition.Size ?? 0;
                    }
                }

                contentType = request.ContentType;
            }

            string user = User.GetUserOrOrgId();

            DataElement newData = DataElementHelper.CreateDataElement(elementType, refs, instance, creationTime, contentType, contentFileName, fileSize, user);

            return(theStream, newData);
        }
Example #20
0
        public async Task <IActionResult> UpdateMemberAsync(Guid userId, Guid targetUserId, CancellationToken cancellationToken)
        {
            if (Request.ContentType != null && !MultipartRequestHelper.IsMultipartContentType(Request.ContentType))
            {
                return(BadRequest("The data submitted is not in the multiform format"));
            }

            var rowVersion = _etagService.GetIfMatch();

            await _userService.UpdateMemberAsync(userId, targetUserId, Request.Body, Request.ContentType, rowVersion, cancellationToken);

            return(Ok());
        }
Example #21
0
        public async Task <IActionResult> Upload()
        {
            if (!MultipartRequestHelper.IsMultipartContentType(Request.ContentType))
            {
                return(BadRequest($"Expected a multipart request, but got {Request.ContentType}"));
            }

            var reader = new MultipartReader(MultipartRequestHelper.GetBoundary(MediaTypeHeaderValue.Parse(Request.ContentType), 100),
                                             Request.Body);

            // In this concept, only one file-content in the Request content is supported.
            Guid id = Guid.NewGuid();

            var section = await reader.ReadNextSectionAsync();

            while (section != null)
            {
                ContentDispositionHeaderValue contentDisposition;
                var hasContentDispositionHeader = ContentDispositionHeaderValue.TryParse(section.ContentDisposition, out contentDisposition);

                if (hasContentDispositionHeader)
                {
                    if (MultipartRequestHelper.HasFileContentDisposition(contentDisposition))
                    {
                        var contentDestinationPath = Path.Combine(_persistenceLocation, $"{id}");
                        var metaDestinationPath    = Path.Combine(_persistenceLocation, $"{id}.meta");

                        // TODO: persistence should be configurable; filesystem or database.

                        using (var metaFile = System.IO.File.Create(metaDestinationPath))
                        {
                            using (var sw = new StreamWriter(metaFile))
                            {
                                sw.WriteLine("originalfilename:" + Path.GetFileName(contentDisposition.FileName.Trim('\"')));
                            }
                        }

                        using (var targetStream = System.IO.File.Create(contentDestinationPath))
                        {
                            await section.Body.CopyToAsync(targetStream);
                        }
                    }
                }

                // Drains any remaining section body that has not been consumed and
                // reads the headers for the next section.
                section = await reader.ReadNextSectionAsync();
            }

            return(new OkObjectResult(new UploadResult(id.ToString())));
        }
Example #22
0
        public async Task <IActionResult> UploadBotAsync()
        {
            var appPath        = Environment.GetEnvironmentVariable("APP_PATH");
            var botRootCatalog = Path.Combine(appPath, "bots");

            if (!MultipartRequestHelper.IsMultipartContentType(Request.ContentType))
            {
                return(BadRequest($"Expected a multipart request, but got {Request.ContentType}"));
            }

            var boundary = MultipartRequestHelper.GetBoundary(
                MediaTypeHeaderValue.Parse(Request.ContentType),
                DefaultFormOptions.MultipartBoundaryLengthLimit);
            var reader = new MultipartReader(boundary, HttpContext.Request.Body);

            var section = await reader.ReadNextSectionAsync();

            while (section != null)
            {
                var hasContentDispositionHeader = ContentDispositionHeaderValue.TryParse(
                    section.ContentDisposition,
                    out var contentDisposition);

                var fileName = contentDisposition.FileName.ToString();
                if (!IsValidFileName(fileName))
                {
                    throw new ArgumentException($"Имя имя '{fileName}' не является корректным именем файла.");
                }

                if (hasContentDispositionHeader)
                {
                    if (MultipartRequestHelper.HasFileContentDisposition(contentDisposition))
                    {
                        using (var copyStream = new MemoryStream())
                        {
                            await section.Body.CopyToAsync(copyStream);

                            copyStream.Seek(0, SeekOrigin.Begin);
                            using (var targetStream = System.IO.File.Create(botRootCatalog))
                            {
                                await copyStream.CopyToAsync(targetStream).ConfigureAwait(false);
                            }
                        }
                    }
                }

                section = await reader.ReadNextSectionAsync();
            }

            return(BadRequest());
        }
        public static int GetFileCount(this HttpRequest request)
        {
#if NETCORE
            if (MultipartRequestHelper.IsMultipartContentType(request.ContentType))
            {
                if (request.Form.Files != null)
                {
                    return(request.Form.Files.Count());
                }
            }
            return(0);
#else
            return(request.Files.Count);
#endif
        }
Example #24
0
        private async Task <FilesAndFormData> ParseMultipartRequest()
        {
            var filesAndFormData = new FilesAndFormData {
                Files = new List <UploadedTempFile>()
            };
            var formAccumulator = new KeyValueAccumulator();

            var boundary = MultipartRequestHelper.GetBoundary(
                MediaTypeHeaderValue.Parse(Request.ContentType),
                _defaultFormOptions.MultipartBoundaryLengthLimit);
            var reader = new MultipartReader(boundary.Value, HttpContext.Request.Body);

            var section = await reader.ReadNextSectionAsync();

            while (section != null)
            {
                if (ContentDispositionHeaderValue.TryParse(section.ContentDisposition, out var contentDisposition))
                {
                    if (MultipartRequestHelper.HasFileContentDisposition(contentDisposition))
                    {
                        var tempFileName = await fileService.CreateTempFile(section.Body);

                        filesAndFormData.Files.Add(new UploadedTempFile {
                            OriginalName = contentDisposition.FileName.Value,
                            TempFileName = tempFileName
                        });
                    }
                    else if (MultipartRequestHelper.HasFormDataContentDisposition(contentDisposition))
                    {
                        var(key, value) = await ParseFormDataSection(formAccumulator, section, contentDisposition);

                        formAccumulator.Append(key, value);

                        if (formAccumulator.ValueCount > _defaultFormOptions.ValueCountLimit)
                        {
                            throw new InvalidDataException($"Form key count limit {_defaultFormOptions.ValueCountLimit} exceeded.");
                        }
                    }
                }

                // Drains any remaining section body that has not been consumed and
                // reads the headers for the next section.
                section = await reader.ReadNextSectionAsync();
            }

            filesAndFormData.FormData = new FormCollection(formAccumulator.GetResults());
            return(filesAndFormData);
        }
        public static HttpPostedFile GetFile(this HttpRequest request, string name)
        {
#if NETCORE
            if (MultipartRequestHelper.IsMultipartContentType(request.ContentType))
            {
                IFormFile file = request.Form.Files.GetFile(name);
                if (file != null)
                {
                    return(new HttpPostedFile(file));
                }
            }
            return(null);
#else
            return(request.Files[name]);
#endif
        }
Example #26
0
        public async Task <IActionResult> UploadRecipe([FromForm] RecipeImage recipe)
        {
            if (!MultipartRequestHelper.IsMultipartContentType(Request.ContentType))
            {
                return(BadRequest($"Expected a multipart request, but got {Request.ContentType}"));
            }
            try
            {
                using (var stream = recipe.Image.OpenReadStream())
                {
                    var cloudBlock = await UploadToBlob(recipe.Image.FileName, null, stream);

                    //// Retrieve the filename of the file you have uploaded
                    //var filename = provider.FileData.FirstOrDefault()?.LocalFileName;
                    if (string.IsNullOrEmpty(cloudBlock.StorageUri.ToString()))
                    {
                        return(BadRequest("An error has occured while uploading your file. Please try again."));
                    }

                    Recipe recipeItem = new Recipe();
                    recipeItem.Name        = recipe.Name;
                    recipeItem.Tags        = recipe.Tags;
                    recipeItem.Author      = recipe.Author;
                    recipeItem.Overview    = recipe.Overview;
                    recipeItem.Ingridients = recipe.Ingridients;
                    recipeItem.Description = recipe.Description;
                    System.Drawing.Image image = System.Drawing.Image.FromStream(stream);
                    recipeItem.Height   = image.Height.ToString();
                    recipeItem.Width    = image.Width.ToString();
                    recipeItem.Url      = cloudBlock.SnapshotQualifiedUri.AbsoluteUri;
                    recipeItem.Uploaded = DateTime.Now.ToString();

                    //                public string Overview { get; set; }
                    //public string Ingridients { get; set; }
                    //public string Description { get; set; }

                    _context.Recipe.Add(recipeItem);
                    await _context.SaveChangesAsync();

                    return(Ok($"File: {recipe.Name} has successfully uploaded"));
                }
            }
            catch (Exception ex)
            {
                return(BadRequest($"An error has occured. Details: {ex.Message}"));
            }
        }
        public async Task <IActionResult> UploadFile([FromForm] RecipesImageItem recipe)
        {
            if (!MultipartRequestHelper.IsMultipartContentType(Request.ContentType))
            {
                return(BadRequest($"Expected a multipart request, but got {Request.ContentType}"));
            }
            try
            {
                using (var stream = recipe.Image.OpenReadStream())
                {
                    var cloudBlock = await UploadToBlob(recipe.Image.FileName, null, stream);

                    //// Retrieve the filename of the file you have uploaded
                    //var filename = provider.FileData.FirstOrDefault()?.LocalFileName;
                    if (string.IsNullOrEmpty(cloudBlock.StorageUri.ToString()))
                    {
                        return(BadRequest("An error has occured while uploading your file. Please try again."));
                    }

                    RecipesItem recipeItem = new RecipesItem();
                    recipeItem.Title       = recipe.Title;
                    recipeItem.Description = recipe.Description;
                    recipeItem.Category    = recipe.Category;
                    recipeItem.Subcategory = recipe.Subcategory;
                    recipeItem.CookTime    = recipe.CookTime;
                    recipeItem.TimeUnit    = recipe.TimeUnit;
                    recipeItem.Size        = recipe.Size;
                    recipeItem.Dietary     = recipe.Dietary;
                    recipeItem.Link        = recipe.Link;
                    recipeItem.PostName    = recipe.PostName;
                    System.Drawing.Image image = System.Drawing.Image.FromStream(stream);
                    recipeItem.Height   = image.Height.ToString();
                    recipeItem.Width    = image.Width.ToString();
                    recipeItem.Image    = cloudBlock.SnapshotQualifiedUri.AbsoluteUri;
                    recipeItem.Uploaded = DateTime.Now.ToString();

                    _context.RecipesItem.Add(recipeItem);
                    await _context.SaveChangesAsync();

                    return(Ok($"File: {recipe.Title} has successfully uploaded"));
                }
            }
            catch (Exception ex)
            {
                return(BadRequest($"An error has occured. Details: {ex.Message}"));
            }
        }
        public async Task <IActionResult> PostQuestionItem([FromForm] NewQuestion newQuestion)
        {
            if (!MultipartRequestHelper.IsMultipartContentType(Request.ContentType))
            {
                return(BadRequest($"Expected a multipart request, but got {Request.ContentType}"));
            }
            QuestionItem questionItem = new QuestionItem();

            try
            {
                using (var stream = newQuestion.image.OpenReadStream())
                {
                    var cloudBlock = await UploadToBlob(newQuestion.image.FileName, null, stream);

                    //// Retrieve the filename of the file you have uploaded
                    //var filename = provider.FileData.FirstOrDefault()?.LocalFileName;
                    if (string.IsNullOrEmpty(cloudBlock.StorageUri.ToString()))
                    {
                        return(BadRequest("An error has occured while uploading your file. Please try again."));
                    }
                    System.Drawing.Image image = System.Drawing.Image.FromStream(stream);
                    questionItem.diagramURL = cloudBlock.SnapshotQualifiedUri.AbsoluteUri;
                }
            }
            catch (Exception)
            {
                // No images was received
                questionItem.diagramURL = "";
            }

            try
            {
                questionItem.title       = newQuestion.title;
                questionItem.description = newQuestion.description;
                questionItem.tag         = newQuestion.tag;
                questionItem.authorID    = newQuestion.authorID;

                _context.QuestionItem.Add(questionItem);
                await _context.SaveChangesAsync();

                return(Ok($"File: {questionItem.title} has successfully uploaded"));
            }
            catch (Exception ex)
            {
                return(BadRequest($"An error has occured. Details: {ex.Message}"));
            }
        }
        public async Task <IActionResult> ImportCsv()
        {
            if (!MultipartRequestHelper.IsMultipartContentType(Request.ContentType))
            {
                return(BadRequest("The request must be multipart"));
            }

            string boundary = MultipartRequestHelper.GetBoundary(
                MediaTypeHeaderValue.Parse(Request.ContentType),
                new FormOptions().MultipartBoundaryLengthLimit);

            var reader  = new MultipartReader(boundary, HttpContext.Request.Body);
            var section = await reader.ReadNextSectionAsync();

            while (section != null)
            {
                ContentDispositionHeaderValue contentDisposition;
                bool hasContentDispositionHeader =
                    ContentDispositionHeaderValue.TryParse(section.ContentDisposition, out contentDisposition);

                if (!hasContentDispositionHeader)
                {
                    section = await reader.ReadNextSectionAsync();

                    continue;
                }

                if (!MultipartRequestHelper.HasFileContentDisposition(contentDisposition))
                {
                    return(BadRequest("The file must have Content-Disposition: form-data"));
                }

                var command = new SaveCsvToImportCommand
                {
                    //InputFile = file,
                    InputStream = section.Body,
                    FileName    = contentDisposition.FileName.Value
                };

                await _mediator.Send(command);

                section = await reader.ReadNextSectionAsync();
            }

            return(Ok());
        }
Example #30
0
        public async Task <IActionResult> UploadFile([FromForm] MovieItemImage movie)
        {
            if (!MultipartRequestHelper.IsMultipartContentType(Request.ContentType))
            {
                return(BadRequest($"Expected a multipart request, but got {Request.ContentType}"));
            }
            try
            {
                using (var stream = movie.Image.OpenReadStream())
                {
                    var cloudBlock = await UploadToBlob(movie.Image.FileName, null, stream);

                    //// Retrieve the filename of the file you have uploaded
                    //var filename = provider.FileData.FirstOrDefault()?.LocalFileName;
                    if (string.IsNullOrEmpty(cloudBlock.StorageUri.ToString()))
                    {
                        return(BadRequest("An error has occured while uploading your file. Please try again."));
                    }

                    MovieItem movieItem = new MovieItem();
                    movieItem.Title       = movie.Title;
                    movieItem.Genre       = movie.Genre;
                    movieItem.Rating      = movie.Rating;
                    movieItem.Description = movie.Description;
                    movieItem.Director    = movie.Director;
                    movieItem.UID         = movie.UID;

                    System.Drawing.Image image = System.Drawing.Image.FromStream(stream);
                    movieItem.Height   = image.Height.ToString();
                    movieItem.Width    = image.Width.ToString();
                    movieItem.Url      = cloudBlock.SnapshotQualifiedUri.AbsoluteUri;
                    movieItem.Uploaded = DateTime.Now.ToString();

                    _context.MovieItem.Add(movieItem);
                    await _context.SaveChangesAsync();

                    return(Ok($"File: {movie.Title} has successfully uploaded"));
                }
            }
            catch (Exception ex)
            {
                return(BadRequest($"An error has occured. Details: {ex.Message}"));
            }
        }