ASP.NET CORE 中的 Request.Files
Posted
技术标签:
【中文标题】ASP.NET CORE 中的 Request.Files【英文标题】:Request.Files in ASP.NET CORE 【发布时间】:2016-08-08 07:02:21 【问题描述】:我正在尝试使用 ajax 请求使用 aspnet 核心上传文件。 在以前的 .net 版本中,我曾经使用
来处理这个问题 foreach (string fileName in Request.Files)
HttpPostedFileBase file = Request.Files[fileName];
//Save file content goes here
fName = file.FileName;
(...)
但现在它在 request.files 处显示错误我怎样才能让它工作?我搜了一下发现httppostedfile已经改成了iformfile但是request.files怎么处理呢?
【问题讨论】:
看看这些链接***.com/questions/26443305/…和***.com/questions/29836342/mvc-6-httppostedfilebase尤其是这个答案***.com/a/27980038/5426333 感谢您的评论,我实际上发现IFormFile file in Request.Form.Files
现在我被困在获取参数值
Request.Form.Files[fileName]
?
【参考方案1】:
这是来自最近项目的工作代码。数据已从 Request.Files 移至 Request.Form.Files。 如果您需要将流转换为字节数组 - 这是唯一对我有用的实现。其他人会返回空数组。
using System.IO;
var filePath = Path.GetTempFileName();
foreach (var formFile in Request.Form.Files)
if (formFile.Length > 0)
using (var inputStream = new FileStream(filePath, FileMode.Create))
// read file to stream
await formFile.CopyToAsync(inputStream);
// stream to byte array
byte[] array = new byte[inputStream.Length];
inputStream.Seek(0, SeekOrigin.Begin);
inputStream.Read(array, 0, array.Length);
// get file name
string fName = formFile.FileName;
【讨论】:
【参考方案2】:我想到的两个好的解决方案如何合并:
var myBytes = await GetByteArrayFromImageAsync(Request.Form.Files[0]);
private async Task<byte[]> GetByteArrayFromImageAsync(IFormFile file)
using (var target = new MemoryStream())
await file.CopyToAsync(target);
return target.ToArray();
【讨论】:
【参考方案3】:对于使用常规格式或 ajax 上传的两个文件,此代码 100% 有效:
[HttpPost]
public async Task<IActionResult> Upload(IList<IFormFile> files)
foreach (IFormFile source in files)
string filename = ContentDispositionHeaderValue.Parse(source.ContentDisposition).FileName.Trim('"');
filename = this.EnsureCorrectFilename(filename);
using (FileStream output = System.IO.File.Create(this.GetPathAndFilename(filename)))
await source.CopyToAsync(output);
return this.RedirectToAction("Index");
private string EnsureCorrectFilename(string filename)
if (filename.Contains("\\"))
filename = filename.Substring(filename.LastIndexOf("\\") + 1);
return filename;
private string GetPathAndFilename(string filename)
return this.HostingEnvironment.WebRootPath + "\\files\\" + filename;
【讨论】:
以上是关于ASP.NET CORE 中的 Request.Files的主要内容,如果未能解决你的问题,请参考以下文章