如何通过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;
;
}
关于如何UPL将这些文件粘贴到Azure Datalake,您可以参考此article。
上传avi文件。
是的。它为我工作。但它将支持的文件格式是什么?我无法上传.avi文件。你能告诉我什么文件将支持? – chinna
无论哪个文件我们都可以上传。看到我更新的答案。我建议你改变一个avi文件并重新上传。 –
好的。但是我们可以上传的文件大小是多少?如果我尝试使用300mb,它根本不是调用控制器方法。我们可以上传的文件的默认大小是多少? – chinna