Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Asp.net core 2.0中的文件上载问题创建0字节映像_C#_Angular_Asp.net Core - Fatal编程技术网

C# Asp.net core 2.0中的文件上载问题创建0字节映像

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[]>> {

一、 我使用angular 5,带有asp.net内核2.0。一、 我正在尝试将文件上载到服务器。代码将文件更新到服务器。但是有0 kb的数据,有时它会上传文件

文件大小不大。它的单位是KB

这是角度代码

 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
,然后决定更改所有内容,但忘记了那个。谢谢