Request.Files in ASP.NET CORE

前端 未结 3 1381
情歌与酒
情歌与酒 2020-12-18 17:51

I am trying to upload files using aspnet core using ajax request . In previous versions of .net i used to handle this using

 foreach (string fileName in Re         


        
相关标签:
3条回答
  • 2020-12-18 18:32

    What about this merge from two good solutions I came around :

    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();
      }
    }
    
    0 讨论(0)
  • 2020-12-18 18:37

    This code works for 100% for both files uploaded using regular form or ajax:

    [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;
    }
    
    0 讨论(0)
  • 2020-12-18 18:47

    This is working code from a recent project. Data has been moved from Request.Files to Request.Form.Files. In case you need to convert stream to byte array - this is the only implementation that worked for me. Others would return empty array.

    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;
          }
       }
    }
    
    0 讨论(0)
提交回复
热议问题