如何通过FormData将视频文件上传到Azure Datalake?

问题描述:

我需要上传视频文件到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];  } 

这种控制器的方法还不是全部调用,而上传的视频和音频文件。保留它正在工作的所有格式。

请帮我解决这个问题。

据我所知,如果我们使用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