2017-08-24 111 views
0

我需要上傳視頻文件到azure datalake,但從窗體上傳時,我無法在asp.net核心MVC應用程序中調用控制器方法。保留所有文件,我可以上傳像png,txt,xls ...但在上傳視頻文件時,根本不用調用控制器方法。請幫我解決這個問題。我正在使用angular2應用程序。我上傳的代碼是如何通過FormData將視頻文件上傳到Azure Datalake?

<form method="post" enctype="multipart/form-data" class="pure-form"> 
<input #fileInput type="file" multiple /> 
     <label>Select Tenant : </label> 
<button (click)="addFile()" class="submit"> Upload </button> 
</form> 

我的服務的方法是

upload(files: any, tenantname: any) { 
    let formData = new FormData(); 
    for (let i = 0; i < files.length; i++) { 
     formData.append("files", files[i]); 
    } return this.http 
    .post("api/values", formData).map(response => console.log(response));} 

而且我的控制方法是

public async void Post([FromForm] IFormCollection filesData) 
    { 

     var files = filesData.Files; 
     var iformFiles = files.ToList(); 
     var file = iformFiles[0];  } 

這種控制器的方法還不是全部調用,而上傳的視頻和音頻文件。保留它正在工作的所有格式。

請幫我解決這個問題。

回答

0

據我所知,如果我們使用angular2上傳文件到MVC控制器,我們不會使用html表單標籤。它會直接使用表單發佈不使用點擊功能。

另外,如果你想在方法中使用IFormCollection,你需要設置IFormCollection arg的名字等於formData的參數。

例如:

public async void Post([FromForm] IFormCollection filesData) 

//must the parameter must be same 

formData.append("filesData", files[i]); 

因此,我建議,你可以按照下面的代碼並再次測試。

HTML:

<input #fileInput type="file" multiple /> 
<label>Select Tenant : </label> 
<button (click)="addFile()" class="submit"> Upload </button> 

TS:

import { Component, ViewChild, NgModule } from '@angular/core'; 
import { UploadService } from './upload.service'; 
import { HttpClient } from "@angular/common/http"; 


@Component({ 
    selector: 'app-root', 
    templateUrl: './app.component.html', 
    styleUrls: ['./app.component.css'] 
}) 
export class AppComponent { 

    constructor(private http: HttpClient) { } 

    title = 'app'; 
    @ViewChild("fileInput") fileInput; 

    addFile(): void { 
     let fi = this.fileInput.nativeElement; 
     if (fi.files) { 
      let fileToUpload = fi.files; 
      this.upload(fileToUpload) 
       .subscribe(res => { 
        console.log(res); 
       }); 
     } 
    } 

    upload(fileToUpload: any) { 
     let formData = new FormData(); 
     for (let i = 0; i < fileToUpload.length; i++) { 
      formData.append("files", fileToUpload[i]); 
     } 

     return this.http 
      .post("/api/Upload", formData); 
    } 

    } 

ASP.NET核心方法:

[HttpPost] 
[Route("/api/upload")] 
public void Upload(IFormCollection files) 
{ 
    var files1 = files.Files; 
    var iformFiles = files1.ToList(); 
    var file = iformFiles[0]; 
    var file2 = iformFiles[1]; 
    int i = 0; 
    ; 
} 

結果: enter image description here

關於如何UPL將這些文件粘貼到Azure Datalake,您可以參考此article


上傳avi文件。

enter image description here

+0

是的。它爲我工作。但它將支持的文件格式是什麼?我無法上傳.avi文件。你能告訴我什麼文件將支持? – chinna

+0

無論哪個文件我們都可以上傳。看到我更新的答案。我建議你改變一個avi文件並重新上傳。 –

+0

好的。但是我們可以上傳的文件大小是多少?如果我嘗試使用300mb,它根本不是調用控制器方法。我們可以上傳的文件的默認大小是多少? – chinna

相關問題