Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.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# FormFile复制到memorystream ObjectDisposedException_C#_Asp.net Core Mvc - Fatal编程技术网

C# FormFile复制到memorystream ObjectDisposedException

C# FormFile复制到memorystream ObjectDisposedException,c#,asp.net-core-mvc,C#,Asp.net Core Mvc,我目前正在使用tinyMCE为一个网站创建一些新闻帖子。 我需要能够上传图像,但我遇到了一个障碍 当我按下控制器时,我得到一个 System.ObjectDisposedException: Cannot access a disposed object. Object name: 'FileBufferingReadStream'. at Microsoft.AspNetCore.WebUtilities.FileBufferingReadStream.ThrowIfDisposed()

我目前正在使用tinyMCE为一个网站创建一些新闻帖子。 我需要能够上传图像,但我遇到了一个障碍

当我按下控制器时,我得到一个

System.ObjectDisposedException: Cannot access a disposed object.
Object name: 'FileBufferingReadStream'.
   at Microsoft.AspNetCore.WebUtilities.FileBufferingReadStream.ThrowIfDisposed()
   at Microsoft.AspNetCore.WebUtilities.FileBufferingReadStream.set_Position(Int64 value)
   at Microsoft.AspNetCore.Http.Internal.ReferenceReadStream..ctor(Stream inner, Int64 offset, Int64 length)
   at Microsoft.AspNetCore.Http.Internal.FormFile.OpenReadStream()
   at Microsoft.AspNetCore.Http.Internal.FormFile.CopyToAsync(Stream target, CancellationToken cancellationToken)
   at HardwareOnlineDk.Web.Areas.Admin.Controllers.ImageController.Upload(IFormFile inputFile) in D:\Kode\HardwareOnlineRider\HOL\SourceCode\Main\Web\Areas\Admin\Controllers\ImageController.cs:line 139
我的代码如下所示:

[HttpPost, ActionName("Upload")]
        public async Task<IActionResult> Upload(IFormFile inputFile)
        {
            try
            {
                var filesCount = Request.Form.Files.Count;

                if (filesCount == 0)
                    return BadRequest("Ingen fil fundet");

                // Get HTTP posted file based on the fieldname. 
                var file = Request.Form.Files.GetFile("file");

                if (file == null)
                    return BadRequest("Fejlkonfiguration: Filnavn ikke korrekt");

                // Check if the file is valid.
                if (!Check(file.FileName, file.ContentType))
                    return BadRequest("Fil ikke gyldig");

                var memoryStream = new MemoryStream();
                await file.CopyToAsync(memoryStream);
                var medie = new Medie
                {
                    Name = file.FileName.Trim('\"'),
                    ParentId = _imageService.TempFolderGuid,
                    ContentLength = file.Length,
                    Content = memoryStream.ToArray()
                };

                try
                {
                    var imageId = await _imageService.Medier_InsertMedie(medie);

                    //TODO Her skal vi gemme ImageId i Session


                    return Json(new
                    {
                        location = $"/api/media/{imageId.Id}.jpg"
                    });
                }
                catch
                {
                    return BadRequest("Kunne ikke gemme billede");
                }
            }
            catch
            {
                return StatusCode(500);
            }
        }
[HttpPost, ActionName("Upload")]
        public async Task<IActionResult> Upload([FromForm]IFormFile file)
        {
            try
            {
                if (file == null)
                    return BadRequest("Fejlkonfiguration: Filnavn ikke korrekt");

                var memoryStream = new MemoryStream();
                await file.CopyToAsync(memoryStream);
                var filesCount = Request.Form.Files.Count;
                if (!Request.ContentType.StartsWith(MultipartContentType))
                    return BadRequest("Contenttype er ikke korrekt");

                if (filesCount == 0)
                    return BadRequest("Ingen fil fundet");

                // Get HTTP posted file based on the fieldname. 

                // Check if the file is valid.
                if (!Check(file.FileName, file.ContentType))
                    return BadRequest("Fil ikke gyldig");


                var medie = new Medie
                {
                    Name = file.FileName.Trim('\"'),
                    ParentId = _imageService.TempFolderGuid,
                    ContentLength = file.Length,
                    Content = memoryStream.ToArray()
                };

                try
                {
                    var imageId = await _imageService.Medier_InsertMedie(medie);

                    //TODO Her skal vi gemme ImageId i Session


                    return Json(new
                    {
                        location = $"/api/media/{imageId.Id}.jpg"
                    });
                }
                catch
                {
                    return BadRequest("Kunne ikke gemme billede");
                }
            }
            catch
            {
                return StatusCode(500);
            }
        }
代码在我执行以下操作时失败:

await file.CopyToAsync(memoryStream)
有人能帮我吗。我迷路了

更新1 我只是尝试用建议的答案修复它,所以我的代码现在看起来如下:

[HttpPost, ActionName("Upload")]
        public async Task<IActionResult> Upload(IFormFile inputFile)
        {
            try
            {
                var filesCount = Request.Form.Files.Count;

                if (filesCount == 0)
                    return BadRequest("Ingen fil fundet");

                // Get HTTP posted file based on the fieldname. 
                var file = Request.Form.Files.GetFile("file");

                if (file == null)
                    return BadRequest("Fejlkonfiguration: Filnavn ikke korrekt");

                // Check if the file is valid.
                if (!Check(file.FileName, file.ContentType))
                    return BadRequest("Fil ikke gyldig");

                var memoryStream = new MemoryStream();
                await file.CopyToAsync(memoryStream);
                var medie = new Medie
                {
                    Name = file.FileName.Trim('\"'),
                    ParentId = _imageService.TempFolderGuid,
                    ContentLength = file.Length,
                    Content = memoryStream.ToArray()
                };

                try
                {
                    var imageId = await _imageService.Medier_InsertMedie(medie);

                    //TODO Her skal vi gemme ImageId i Session


                    return Json(new
                    {
                        location = $"/api/media/{imageId.Id}.jpg"
                    });
                }
                catch
                {
                    return BadRequest("Kunne ikke gemme billede");
                }
            }
            catch
            {
                return StatusCode(500);
            }
        }
[HttpPost, ActionName("Upload")]
        public async Task<IActionResult> Upload([FromForm]IFormFile file)
        {
            try
            {
                if (file == null)
                    return BadRequest("Fejlkonfiguration: Filnavn ikke korrekt");

                var memoryStream = new MemoryStream();
                await file.CopyToAsync(memoryStream);
                var filesCount = Request.Form.Files.Count;
                if (!Request.ContentType.StartsWith(MultipartContentType))
                    return BadRequest("Contenttype er ikke korrekt");

                if (filesCount == 0)
                    return BadRequest("Ingen fil fundet");

                // Get HTTP posted file based on the fieldname. 

                // Check if the file is valid.
                if (!Check(file.FileName, file.ContentType))
                    return BadRequest("Fil ikke gyldig");


                var medie = new Medie
                {
                    Name = file.FileName.Trim('\"'),
                    ParentId = _imageService.TempFolderGuid,
                    ContentLength = file.Length,
                    Content = memoryStream.ToArray()
                };

                try
                {
                    var imageId = await _imageService.Medier_InsertMedie(medie);

                    //TODO Her skal vi gemme ImageId i Session


                    return Json(new
                    {
                        location = $"/api/media/{imageId.Id}.jpg"
                    });
                }
                catch
                {
                    return BadRequest("Kunne ikke gemme billede");
                }
            }
            catch
            {
                return StatusCode(500);
            }
        }
[HttpPost,ActionName(“上传”)]
公共异步任务上载([FromForm]格式文件)
{
尝试
{
if(file==null)
返回错误请求(“Fejlkonfiguration:Filnavn ikke korrekt”);
var memoryStream=新的memoryStream();
等待文件.CopyToAsync(memoryStream);
var filescont=Request.Form.Files.Count;
如果(!Request.ContentType.StartsWith(MultipartContentType))
返回BadRequest(“Contenttype er ikke korrekt”);
如果(filescont==0)
退货申请(“Ingen fil fundet”);
//基于字段名获取HTTP发布的文件。
//检查文件是否有效。
如果(!检查(file.FileName,file.ContentType))
返回请求(“Fil ikke gyldig”);
var medie=新medie
{
Name=file.FileName.Trim(“\”),
ParentId=\u imageService.TempFolderGuid,
ContentLength=file.Length,
Content=memoryStream.ToArray()
};
尝试
{
var imageId=wait_imageService.Medier_InsertMedie(medie);
//完成她的skal vi gemme ImageId i课程
返回Json(新的
{
位置=$“/api/media/{imageId.Id}.jpg”
});
}
抓住
{
退货申请(“Kunne ikke gemme billede”);
}
}
抓住
{
返回状态码(500);
}
}

输入参数不再为null,但它仍引发相同的异常

您指出
inputFile
始终为null

绑定按名称匹配表单文件

参考文献

基于

// Get HTTP posted file based on the fieldname. 
var file = Request.Form.Files.GetFile("file");
已发布字段的名称为
“文件”

重命名操作参数以匹配,并明确说明何时使用
[FromForm]

[HttpPost, ActionName("Upload")]
public async Task<IActionResult> Upload([FromForm]IFormFile file) {
    try {
        if (file == null)
            return BadRequest("Fejlkonfiguration: Filnavn ikke korrekt");

        // Check if the file is valid.
        if (!Check(file.Name, file.ContentType))
            return BadRequest("Fil ikke gyldig");

        var medie = new Medie {
            Name = file.Name.Trim('\"'),
            ParentId = _imageService.TempFolderGuid
        };

        var fileStream = file.OpenStreamRead();
        using (var memoryStream = new MemoryStream()) {
            await fileStream.CopyToAsync(memoryStream);
            medie.Content = memoryStream.ToArray();
            medie.ContentLength = memoryStream.Length,
        }

        try {
            var imageId = await _imageService.Medier_InsertMedie(medie);

            //TODO Her skal vi gemme ImageId i Session

            return Json(new {
                location = $"/api/media/{imageId.Id}.jpg"
            });
        } catch {
            return BadRequest("Kunne ikke gemme billede");
        }
    } catch {
        return StatusCode(500);
    }
}
[HttpPost,ActionName(“上传”)]
公共异步任务上载([FromForm]格式文件){
试一试{
if(file==null)
返回错误请求(“Fejlkonfiguration:Filnavn ikke korrekt”);
//检查文件是否有效。
如果(!检查(file.Name,file.ContentType))
返回请求(“Fil ikke gyldig”);
var medie=新medie{
Name=file.Name.Trim(“\”),
ParentId=\u imageService.TempFolderGuid
};
var fileStream=file.OpenStreamRead();
使用(var memoryStream=new memoryStream()){
等待fileStream.CopyToAsync(memoryStream);
medie.Content=memoryStream.ToArray();
medie.ContentLength=memoryStream.Length,
}
试一试{
var imageId=wait_imageService.Medier_InsertMedie(medie);
//完成她的skal vi gemme ImageId i课程
返回Json(新的{
位置=$“/api/media/{imageId.Id}.jpg”
});
}抓住{
退货申请(“Kunne ikke gemme billede”);
}
}抓住{
返回状态码(500);
}
}

您指出
inputFile
始终为空

绑定按名称匹配表单文件

参考文献

基于

// Get HTTP posted file based on the fieldname. 
var file = Request.Form.Files.GetFile("file");
已发布字段的名称为
“文件”

重命名操作参数以匹配,并明确说明何时使用
[FromForm]

[HttpPost, ActionName("Upload")]
public async Task<IActionResult> Upload([FromForm]IFormFile file) {
    try {
        if (file == null)
            return BadRequest("Fejlkonfiguration: Filnavn ikke korrekt");

        // Check if the file is valid.
        if (!Check(file.Name, file.ContentType))
            return BadRequest("Fil ikke gyldig");

        var medie = new Medie {
            Name = file.Name.Trim('\"'),
            ParentId = _imageService.TempFolderGuid
        };

        var fileStream = file.OpenStreamRead();
        using (var memoryStream = new MemoryStream()) {
            await fileStream.CopyToAsync(memoryStream);
            medie.Content = memoryStream.ToArray();
            medie.ContentLength = memoryStream.Length,
        }

        try {
            var imageId = await _imageService.Medier_InsertMedie(medie);

            //TODO Her skal vi gemme ImageId i Session

            return Json(new {
                location = $"/api/media/{imageId.Id}.jpg"
            });
        } catch {
            return BadRequest("Kunne ikke gemme billede");
        }
    } catch {
        return StatusCode(500);
    }
}
[HttpPost,ActionName(“上传”)]
公共异步任务上载([FromForm]格式文件){
试一试{
if(file==null)
返回错误请求(“Fejlkonfiguration:Filnavn ikke korrekt”);
//检查文件是否有效。
如果(!检查(file.Name,file.ContentType))
返回请求(“Fil ikke gyldig”);
var medie=新medie{
Name=file.Name.Trim(“\”),
ParentId=\u imageService.TempFolderGuid
};
var fileStream=file.OpenStreamRead();
使用(var memoryStream=new memoryStream()){
等待fileStream.CopyToAsync(memoryStream);
medie.Content=memoryStream.ToArray();
medie.ContentLength=memoryStream.Length,
}
试一试{
var imageId=wait_imageService.Medier_InsertMedie(medie);
//完成她的skal vi gemme ImageId i课程
返回Json(新的{
位置=$“/api/media/{imageId.Id}.jpg”
});
}抓住{
退货申请(“Kunne ikke gemme billede”);
}
}抓住{
返回状态码(500);
}
}

我觉得我应该发布我是如何解决这个问题的

问题是我有一个登录中间件,它读取httpcontext。 使用此处找到的答案:
为我解决了这个问题。

我觉得我应该发布我是如何解决的

问题是我有一个登录中间件,它读取httpcontext。 使用此处找到的答案:
为我解决了这个问题。

为什么不使用
inputFile
?它总是空的。我可以从请求中获取文件,尽管你为什么不使用
inputFile
?它总是空的。我可以从请求中获取文件,尽管我会尝试并报告。感谢你的建议我刚刚尝试了你的解决方案,参数是不再为null。但是它会抛出sa