C# Asp.net core 2.0中的文件上载问题创建0字节映像
一、 我使用angular 5,带有asp.net内核2.0。一、 我正在尝试将文件上载到服务器。代码将文件更新到服务器。但是有0 kb的数据,有时它会上传文件 文件大小不大。它的单位是KB 这是角度代码C# Asp.net core 2.0中的文件上载问题创建0字节映像,c#,angular,asp.net-core,C#,Angular,Asp.net Core,一、 我使用angular 5,带有asp.net内核2.0。一、 我正在尝试将文件上载到服务器。代码将文件更新到服务器。但是有0 kb的数据,有时它会上传文件 文件大小不大。它的单位是KB 这是角度代码 public QuestionPostHttpCall(_questionPhotoVM: QuestionPhotoViewModel): Observable<GenericResponseObject<QuestionPhotoViewModel[]>> {
public QuestionPostHttpCall(_questionPhotoVM: QuestionPhotoViewModel): Observable<GenericResponseObject<QuestionPhotoViewModel[]>> {
const formData: FormData = new FormData();
formData.append('FileUpload', _questionPhotoVM.FileUpload);
formData.append('QuestionText', _questionPhotoVM.questionText);
formData.append('QuestionId', _questionPhotoVM.questionId);
const headers = new HttpHeaders().set('enctype', 'multipart/form-data');
return this._httpClientModule.post<GenericResponseObject<QuestionPhotoViewModel[]>>(this.questionPhotoUrl, formData);
}
文件将上载到服务器。但有时它上传0字节,有时它上传正确
文件的分辨率为570 X 400,文件大小为197KB
我哪里做错了??请任何人告诉我。确实,我需要在某个地方指定最大字节数???您的问题是您正在使用异步函数,而不是等待它。
您使用的是ASP.NET Core,因此您应该(阅读“必须”)使用async all-way模式:
[HttpPost]
public async Task<JsonResult> QuestionPhotoPost(IFormFile FileUpload, string QuestionText, Guid? QuestionId)
{
string TempFileName = string.Empty;
var directiveToUpload = Path.Combine(_environment.WebRootPath, "images\\UploadFile");
var http = HttpRequestExtensions.GetUri(Request);
QuestionViewModel model = new QuestionViewModel();
try
{
if (FileUpload != null)
{
TempFileName = FileUpload.FileName;
await CheckFileFromFrontEndAsync();
}
}
catch (Exception exception)
{
}
async Task CheckFileFromFrontEndsync()
{
if (FileUpload != null)
{
if (!System.IO.Directory.Exists(directiveToUpload))
{
System.IO.Directory.CreateDirectory(directiveToUpload);
}
if (System.IO.File.Exists(string.Format("{0}\\{1}\\{2}", _environment.WebRootPath, "images\\UploadFile", FileUpload.FileName)))
{
TempFileName = Guid.NewGuid().ToString() + FileUpload.FileName;
}
model.PictureUrl = string.Format("{0}://{1}/{2}/{3}/{4}", http.Scheme, http.Authority, "images", "UploadFile", TempFileName);
await SaveFileToServerAsync(TempFileName);
}
}
async Task SaveFileToServerAsync(string FileName)
{
if (FileUpload.Length > 0)
{
using (var stream = new FileStream(Path.Combine(directiveToUpload, FileName), FileMode.Create))
{
await FileUpload.CopyToAsync(stream);
}
}
}
return Json(genericResponseObject);
}
[HttpPost]
公共异步任务QuestionPhotoPost(文件上传,字符串QuestionText,Guid?QuestionId)
{
string TempFileName=string.Empty;
var directiveToUpload=Path.Combine(_environment.WebRootPath,“images\\UploadFile”);
var http=HttpRequestExtensions.GetUri(请求);
QuestionViewModel=新的QuestionViewModel();
尝试
{
if(FileUpload!=null)
{
TempFileName=FileUpload.FileName;
等待CheckFileFromFrontEndAsync();
}
}
捕获(异常)
{
}
异步任务CheckFileFromFrontEndsync()
{
if(FileUpload!=null)
{
如果(!System.IO.Directory.Exists(directiveToUpload))
{
System.IO.Directory.CreateDirectory(directiveToUpload);
}
如果(System.IO.File.Exists(string.Format(“{0}\\\{1}\\\\{2}”,_environment.WebRootPath,“images\\UploadFile”,FileUpload.FileName)))
{
TempFileName=Guid.NewGuid().ToString()+FileUpload.FileName;
}
model.PictureUrl=string.Format(“{0}://{1}/{2}/{3}/{4}”,http.Scheme,http.Authority,“图像”,“上传文件”,TempFileName);
等待SaveFileToServerAsync(TempFileName);
}
}
异步任务SaveFileToServerAsync(字符串文件名)
{
如果(FileUpload.Length>0)
{
使用(var stream=newfilestream(Path.Combine(directiveToUpload,FileName),FileMode.Create))
{
等待文件上传。CopyToAsync(流);
}
}
}
返回Json(genericResponseObject);
}
为了使代码更具可读性,我会将那些内联函数移到外部。您的问题是您正在使用异步函数,而不是等待它。
您使用的是ASP.NET Core,因此您应该(阅读“必须”)使用async all-way模式:
[HttpPost]
public async Task<JsonResult> QuestionPhotoPost(IFormFile FileUpload, string QuestionText, Guid? QuestionId)
{
string TempFileName = string.Empty;
var directiveToUpload = Path.Combine(_environment.WebRootPath, "images\\UploadFile");
var http = HttpRequestExtensions.GetUri(Request);
QuestionViewModel model = new QuestionViewModel();
try
{
if (FileUpload != null)
{
TempFileName = FileUpload.FileName;
await CheckFileFromFrontEndAsync();
}
}
catch (Exception exception)
{
}
async Task CheckFileFromFrontEndsync()
{
if (FileUpload != null)
{
if (!System.IO.Directory.Exists(directiveToUpload))
{
System.IO.Directory.CreateDirectory(directiveToUpload);
}
if (System.IO.File.Exists(string.Format("{0}\\{1}\\{2}", _environment.WebRootPath, "images\\UploadFile", FileUpload.FileName)))
{
TempFileName = Guid.NewGuid().ToString() + FileUpload.FileName;
}
model.PictureUrl = string.Format("{0}://{1}/{2}/{3}/{4}", http.Scheme, http.Authority, "images", "UploadFile", TempFileName);
await SaveFileToServerAsync(TempFileName);
}
}
async Task SaveFileToServerAsync(string FileName)
{
if (FileUpload.Length > 0)
{
using (var stream = new FileStream(Path.Combine(directiveToUpload, FileName), FileMode.Create))
{
await FileUpload.CopyToAsync(stream);
}
}
}
return Json(genericResponseObject);
}
[HttpPost]
公共异步任务QuestionPhotoPost(文件上传,字符串QuestionText,Guid?QuestionId)
{
string TempFileName=string.Empty;
var directiveToUpload=Path.Combine(_environment.WebRootPath,“images\\UploadFile”);
var http=HttpRequestExtensions.GetUri(请求);
QuestionViewModel=新的QuestionViewModel();
尝试
{
if(FileUpload!=null)
{
TempFileName=FileUpload.FileName;
等待CheckFileFromFrontEndAsync();
}
}
捕获(异常)
{
}
异步任务CheckFileFromFrontEndsync()
{
if(FileUpload!=null)
{
如果(!System.IO.Directory.Exists(directiveToUpload))
{
System.IO.Directory.CreateDirectory(directiveToUpload);
}
如果(System.IO.File.Exists(string.Format(“{0}\\\{1}\\\\{2}”,_environment.WebRootPath,“images\\UploadFile”,FileUpload.FileName)))
{
TempFileName=Guid.NewGuid().ToString()+FileUpload.FileName;
}
model.PictureUrl=string.Format(“{0}://{1}/{2}/{3}/{4}”,http.Scheme,http.Authority,“图像”,“上传文件”,TempFileName);
等待SaveFileToServerAsync(TempFileName);
}
}
异步任务SaveFileToServerAsync(字符串文件名)
{
如果(FileUpload.Length>0)
{
使用(var stream=newfilestream(Path.Combine(directiveToUpload,FileName),FileMode.Create))
{
等待文件上传。CopyToAsync(流);
}
}
}
返回Json(genericResponseObject);
}
为了使代码更具可读性,我将这些内联函数移到外部。您忘记等待OP最初没有等待的东西:)@Evk Oops,您是对的。我最初只修复了
SaveFileToServerAsync
,然后决定更改所有内容,但忘记了那个。谢谢你忘了等待OP原来没有等待的东西:)@Evk-Oops,你是对的。我最初只修复了SaveFileToServerAsync
,然后决定更改所有内容,但忘记了那个。谢谢