2017-04-17 7 views
1

を受け入れるASP.NETコントローラに複数のファイルを提出、私はこのようになりますコントローラ機能があります:私のフロントエンドでは私のASP.NETコアバックエンドでいるICollection <IFormFile>

[HttpPost] 
[Route("documents/upload")] 
public async Task<IActionResult> UploadFile(ICollection<IFormFile> files) 
{ 
    ... 
} 

を、私は関数を呼び出しますこのように:

var postSettings = { 
    method: 'POST', 
    credentials: 'include', 
    mode: 'cors' 
} 
uploadDocuments(files) { 
    var data = new FormData(); 
    data.append('files', files); 
    postSettings.body = data; 

    return fetch(endPoint + '/documents/upload', postSettings); 
} 

「ファイル」は、単一のファイルされている場合は - ではない配列つのファイルが、単一のファイルオブジェクトと - UploadFileは、単一のファイルを含むICollection<IFormFile>と呼ばれています。

"ファイル"がファイルのリストである場合、FileListまたはFileオブジェクトの配列UploadFileのいずれかが空のICollection<IFormFile>で呼び出されます。

ICollection<IFormFile>として解析できるようにファイルリストを提出するにはどうすればよいですか?

答えて

2

リファレンスUploading multiple files at once - with Fetch

uploadDocuments(endPoint, files) { 
    var postSettings = { 
     method: 'POST', 
     credentials: 'include', 
     mode: 'cors' 
    }; 
    var data = new FormData(); 
    if(files.length > 1) { 
     for(var x = 0; x < files.length; x++) { 
      data.append('file' + x, files.item(x));  
     } 
    } else { 
     data.append('files', files); 
    } 
    postSettings.body = data; 

    return fetch(endPoint + '/documents/upload', postSettings); 
} 

リファレンスUploading small files with model binding

結合モデルとIFormFile インタフェースを使用してファイルをアップロードするとき、アクションメソッドが受け入れることができるいずれかIFormFile単一または IEnumerable<IFormFile>(又はList<IFormFile>) 複数のファイルを表します。次の例では、1つまたは複数のアップロードされたファイルをループしてローカルファイルシステムに保存し、アップロードされたファイルの総数とサイズを に返します。

[HttpPost] 
[Route("documents/upload")] 
public async Task<IActionResult> Post(List<IFormFile> files) 
{ 
    long size = files.Sum(f => f.Length); 

    // full path to file in temp location 
    var filePath = Path.GetTempFileName(); 

    foreach (var formFile in files) 
    { 
     if (formFile.Length > 0) 
     { 
      using (var stream = new FileStream(filePath, FileMode.Create)) 
      { 
       await formFile.CopyToAsync(stream); 
      } 
     } 
    } 

    // process uploaded files 
    // Don't rely on or trust the FileName property without validation. 

    return Ok(new { count = files.Count, size, filePath}); 
} 
関連する問題