MVC 6 HttpPostedFileBase?
我正在尝试使用
MVC 6使用了另一种机制来上传文件。您可以在GitHub或其他来源上获得更多示例。只需使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | public async Task<IActionResult> UploadSingle(IFormFile file) { FileDetails fileDetails; using (var reader = new StreamReader(file.OpenReadStream())) { var fileContent = reader.ReadToEnd(); var parsedContentDisposition = ContentDispositionHeaderValue.Parse(file.ContentDisposition); var fileName = parsedContentDisposition.FileName; } ... } [HttpPost] public async Task<IActionResult> UploadMultiple(ICollection<IFormFile> files) { var uploads = Path.Combine(_environment.WebRootPath,"uploads"); foreach(var file in files) { if(file.Length > 0) { var fileName = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim('"'); await file.SaveAsAsync(Path.Combine(uploads,fileName)); } ... } } |
您可以在asp.net源代码中看到
MVC6中没有
示例:https://github.com/aspnet/Mvc/blob/dev/test/WebSites/ModelBindingWebSite/Controllers/FileUploadController.cs
以上链接的摘录:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | public FileDetails UploadSingle(IFormFile file) { FileDetails fileDetails; using (var reader = new StreamReader(file.OpenReadStream())) { var fileContent = reader.ReadToEnd(); var parsedContentDisposition = ContentDispositionHeaderValue.Parse(file.ContentDisposition); fileDetails = new FileDetails { Filename = parsedContentDisposition.FileName, Content = fileContent }; } return fileDetails; } |
我搜索了很长时间,试图将其组合到.net核心中,并获得了以下内容。接下来将要进行Base64转换,以便检索和显示更加容易。我已经使用IFormFileCollection来执行多个文件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | [HttpPost] public async Task<IActionResult> Create(IFormFileCollection files) { Models.File fileIn = new Models.File(); if(model != null && files != null) { foreach (var file in files) { if (file.Length > 0) { var fileName = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim('"'); byte[] fileBytes = null; using (var fileStream = file.OpenReadStream()) using (var ms = new MemoryStream()) { fileStream.CopyTo(ms); fileBytes = ms.ToArray(); //string s = Convert.ToBase64String(fileBytes); // act on the Base64 data } fileIn.Filename = fileName; fileIn.FileLength = Convert.ToInt32(file.Length); fileIn.FileType = file.ContentType; fileIn.FileTypeId = model.FileTypeId; fileIn.FileData = fileBytes; _context.Add(fileIn); await _context.SaveChangesAsync(); } } } return View(); } |
编辑
下面是将文件返回到列表然后下载的信息。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | public JsonResult GetAllFiles() { var files = _context.File .Include(a => a.FileCategory) .Select(a => new { id = a.Id.ToString(), fileName = a.Filename, fileData = a.FileData, fileType = a.FileType, friendlyName = a.FriendlyName, fileCategory = a.FileCategory.Name.ToLower() }).ToList(); return Json(files); } public FileStreamResult DownloadFileById(int id) { // Fetching file encoded code from database. var file = _context.File.SingleOrDefault(f => f.Id == id); var fileData = file.FileData; var fileName = file.Filename; // Converting to code to byte array byte[] bytes = Convert.FromBase64String(fileData); // Converting byte array to memory stream. MemoryStream stream = new MemoryStream(bytes); // Create final file stream result. FileStreamResult fileStream = new FileStreamResult(stream,"*/*"); // File name with file extension. fileStream.FileDownloadName = fileName; return fileStream; } |