首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MVC6 HttpPostedFileBase?

MVC6 HttpPostedFileBase?
EN

Stack Overflow用户
提问于 2015-04-24 07:49:31
回答 3查看 38.8K关注 0票数 48

我正在尝试使用MVC 6上传图像;但是,我找不到类HttpPostedFileBase。我已经检查了GitHub,但没有任何运气。谁知道用MVC6上传文件的正确方法

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-01-12 20:42:39

MVC6使用了另一种上传文件的机制。您可以在GitHubother sources上获得更多示例。如果想同时上传几个文件,只需使用IFormFile作为操作参数或文件集合,或者使用IFormFileCollection

代码语言:javascript
复制
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 sources中查看IFormFile的当前合同。另请参阅ContentDispositionHeaderValue以了解更多文件信息。

票数 62
EN

Stack Overflow用户

发布于 2015-04-24 21:20:29

MVC6中没有HttpPostedFileBase。您可以改用IFormFile

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

来自上述链接的代码片段:

代码语言:javascript
复制
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;
}
票数 20
EN

Stack Overflow用户

发布于 2016-12-13 01:18:32

我寻找了很长一段时间,试图在.net核心中拼凑起来,最终得到了下面的结果。接下来将完成Base64转换,以便检索和显示更容易一些。我曾经使用过IFormFileCollection来处理多个文件。

代码语言:javascript
复制
[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();
    }

编辑

下面是将文件返回到列表,然后下载。

代码语言:javascript
复制
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;
    }
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29836342

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档