2017-08-24 6 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引数の名前を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のCORE方法:

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

結果:UPLする方法について enter image description here

これらのファイルをAzure Datalakeに転送するには、articleを参照してください。


aviファイルをアップロードします。

enter image description here

+0

はい。それは私のために働いた。サポートするファイル形式は何ですか? .aviファイルをアップロードできません。ファイルが何をサポートするのか教えていただけますか? – chinna

+0

どのファイルをアップロードしても問題ありません。私の更新された答えを見てください。私はあなたがaviファイルを変更し、再度アップロードすることをお勧めします。 –

+0

よろしくお願いします。アップロードできるファイルサイズは?私は300メガバイトとしようとすると、それはまったくコントローラメソッドを呼び出すことではありません。アップロード可能なファイルのデフォルトサイズは何ですか? – chinna

関連する問題