MVC 6 HttpPostedFileBase?

Ste*_*yer 39 httppostedfilebase asp.net-core-mvc

我正在尝试使用上传图片MVC 6; 但是,我无法找到班级HttpPostedFileBase.我检查过GitHub,没有运气.有谁知道上传文件的正确方法MVC6

Vad*_*nov 55

MVC 6使用另一种机制来上传文件.您可以在GitHub其他 来源上获得更多示例.只需将IFormFile您的操作或文件集合用作参数,或者IFormFileCollection如果您想在同一时间上传少量文件:

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));
        }
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以IFormFileasp.net源中看到当前的合同.另请参阅ContentDispositionHeaderValue其他文件信息.

  • 您可以通过提及需要哪些“使用”以及是否需要项目引用来改进此答案 - 因为 dotnetcore 默认情况下不包含很多内容,并且必须显式添加它们。也许 Visual Studio 会自动添加正确的引用,但 Visual Studio Code 不能。 (3认同)

Kir*_*lla 20

HttpPostedFileBaseMVC6中没有.你可以IFormFile改用.

示例:https://github.com/aspnet/Mvc/blob/dev/test/WebSites/ModelBindingWebSite/Controllers/FileUploadController.cs

以上链接的代码段:

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;
}
Run Code Online (Sandbox Code Playgroud)