Asp.net core mvc MVC 6 HttpPostedFileBase?

Asp.net core mvc MVC 6 HttpPostedFileBase?,asp.net-core-mvc,httppostedfilebase,Asp.net Core Mvc,Httppostedfilebase,我正在尝试使用MVC6上传图像;但是,我找不到类HttpPostedFileBase。我已经检查了GitHub,没有任何运气。有人知道在MVC6中上传文件的正确方法吗?MVC6中没有HttpPostedFileBase。您可以改用ifformfile 例如: 上面链接中的代码段: public FileDetails UploadSingle(IFormFile file) { FileDetails fileDetails; using (var reader = new St

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

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

例如:

上面链接中的代码段:

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;
}

MVC6使用了另一种机制来上传文件。您可以在或上获得更多示例。只需使用
ifformfile
作为您操作的参数或文件集合,或者如果您希望同时上载几个文件:

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));
        }
        ...
    }
}
public async Task UploadSingle(ifformfile)
{
文件详情文件详情;
使用(var reader=newstreamreader(file.OpenReadStream()))
{
var fileContent=reader.ReadToEnd();
var parsedContentDisposition=ContentDispositionHeaderValue.Parse(file.ContentDisposition);
var fileName=parsedContentDisposition.fileName;
}
...
}
[HttpPost]
公共异步任务上载多个(ICollection文件)
{
var uploads=Path.Combine(_environment.WebRootPath,“uploads”);
foreach(文件中的var文件)
{
如果(file.Length>0)
{
var fileName=ContentDispositionHeaderValue.Parse(file.ContentDisposition.fileName.Trim(“”);
wait file.SaveAsAsync(Path.Combine(上传,文件名));
}
...
}
}

您可以在中查看当前的
ifformfile合同。有关其他文件信息,请参见。

我在.net core中搜索了很长一段时间,试图将其拼凑在一起,结果如下所示。下一步将进行Base64转换,以便检索和显示更容易一些。我使用了iformFileCollective在上可以执行多个文件

[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();
    }

我使用的是Beta 7,但当ajax请求时,我发现IFormFile为null。在我的示例中也找不到FileDetails。请您指导。我正在尝试将图像转换为字节数组,但流读取器对象中没有readbytes或等效方法。而二进制读取器现在无法工作,因为ifileform对象没有输入流property@RachitGuptaW您的场景是什么?为什么需要将图像转换为
byte[]
。您实际使用的类型是什么?希望下一个链接对您有所帮助。您可以通过提及需要使用哪种类型以及是否需要项目引用来改进此答案-因为默认情况下dotnetcore不包含很多内容,并且必须显式添加这些内容。也许Visual Studio会自动添加正确的内容引用,但Visual Studio代码不能。另一个选项:public async Task Create(),然后可以通过以下方式检索文件:var files=HttpContext.Request.Form.files;我试图编辑上面的注释,但SOF说我超过了5分钟。下面是另一个选项:public JsonResult Create(),然后可以通过:var files=HttpContext.Request.Form.files检索文件;这两个选项都可以将多个文件发送到服务器。我在这里浪费了一整天的时间试图解决这个问题。
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;
    }