2016-04-16 67 views
6

Sto tentando di caricare file usando il nucleo di aspnet usando una richiesta Ajax. Nelle versioni precedenti di .NET ho usato per gestire questo utilizzandoRequest.Files in ASP.NET CORE

foreach (string fileName in Request.Files) 
      { 
       HttpPostedFileBase file = Request.Files[fileName]; 
       //Save file content goes here 

       fName = file.FileName; 
    (...) 

ma ora il suo mostrando errore in request.files come posso farlo funzionare? ho cercato e ho trovato che httppostedfile è stato cambiato in iformfile ma come gestire request.files?

+1

un'occhiata a questi link http://stackoverflow.com/questions/26443305/how-can-i-upload-a-file-in-mvc-6-under-vnext e http: // stackoverflow.com/questions/29836342/mvc-6-httppostedfilebase specialmente questa risposta http://stackoverflow.com/a/27980038/5426333 –

+0

grazie per il commento, ho effettivamente trovato il file 'IFormFile in Request.Form.Files' ora i Sono bloccato per ottenere i valori dei parametri – Ironsun

risposta

1

Questo codice funziona per il 100% per entrambi i file caricati tramite il modulo regolare o ajax: codice

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

Questo sta lavorando da un recente progetto. I dati sono stati spostati da Request.Files a Request.Form.Files. Nel caso in cui sia necessario convertire stream in array di byte, questa è l'unica implementazione che ha funzionato per me. Altri restituirebbero una matrice vuota.

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