Asp.Net Core 2将FileMultipartSection转换为IFormFile

时间:2018-04-24 12:55:53

标签: c# asp.net file-upload

我正在与另一个团队合作开发一个项目,他们创建了一个我必须使用的类库。在其中一种方法中,他们会收到IFormFile的列表,但在我的上传端点中,由于性能问题,我使用MultipartReader进行上传。

我的问题是我很难将FileMultipartSection转换为IFormFile。我似乎已经this link但我仍然无法从.ContentType获取FileMultipartSection等属性。这是我试图让它工作的代码(reference here):

        public async Task<IActionResult> UploadMultipartUsingReader()
        {
            var boundary = GetBoundary(Request.ContentType);
            var reader = new MultipartReader(boundary, Request.Body, 80 * 1024);

            var valuesByKey = new Dictionary<string, string>();
            MultipartSection section;

            var files = new List<FileMultipartSection>();
            //var files = new List<IFormFile>();

            while ((section = await reader.ReadNextSectionAsync()) != null)
            {
                var contentDispo = section.GetContentDispositionHeader();

                if (contentDispo.IsFileDisposition())
                {
                    var fileSection = section.AsFileSection();
                    var bufferSize = 32 * 1024;
                    await HelperFunctions.ReadStream(fileSection.FileStream, bufferSize);
                    files.Add(fileSection); // HERE I should add a convertion from  FileMultipartSection to   IFormFile

                }
                else if (contentDispo.IsFormDisposition())
                {
                    var formSection = section.AsFormDataSection();
                    var value = await formSection.GetValueAsync();
                    valuesByKey.Add(formSection.Name, value);
                }
            }
        return Ok();
    }

是否可以进行此转换?如果是这样,我该怎么办? 谢谢你的帮助

UPDATE 我也试过这样,似乎失败了。它缺乏属性:

            using (var ms = new MemoryStream())
            {
                await fileSection.FileStream.CopyToAsync(ms);
                Microsoft.AspNetCore.Http.Internal.FormFile ifile = new Microsoft.AspNetCore.Http.Internal.FormFile(ms, 0, ms.Length, fileSection.Name, fileSection.FileName);
                files.Add(ifile);
            }

0 个答案:

没有答案