Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/85.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
Html 通过查看将照片和视频保存到数据库中_Html_Asp.net Core - Fatal编程技术网

Html 通过查看将照片和视频保存到数据库中

Html 通过查看将照片和视频保存到数据库中,html,asp.net-core,Html,Asp.net Core,我有一个登录和注销程序。 我有一个练习课,我有一个创建视图,允许我创建由姓名、照片、视频组成的练习。 我在“视图创建”中填写表单,当我单击“创建”时,我会看到此错误 NullReferenceException: Object reference not set to an instance of an object. WebApplication1.Controllers.ExerciciosGinasiosController.Create(ExerciciosGinasio exercic

我有一个登录和注销程序。 我有一个练习课,我有一个创建视图,允许我创建由姓名、照片、视频组成的练习。 我在“视图创建”中填写表单,当我单击“创建”时,我会看到此错误

NullReferenceException: Object reference not set to an instance of an object.
WebApplication1.Controllers.ExerciciosGinasiosController.Create(ExerciciosGinasio exerciciosGinasio, IFormFile fotografia, IFormFile video) in ExerciciosGinasiosController.cs

            string nome_ficheiro = Path.GetFileName(fotografia.FileName);
在运动课上我有

 [Table("Exercicios_Ginasio")]
    public partial class ExerciciosGinasio
    {
        public ExerciciosGinasio()
        {
            Inclui = new HashSet<Inclui>();
        }

        [Key]
        [Column("IDExercicios_Ginasio")]
        public int IdexerciciosGinasio { get; set; }
        [Required]
        [Column("nome")]
        [StringLength(30)]
        public string Nome { get; set; }
        [Required]
        [Column("texto_descritivo")]
        [StringLength(1000)]
        public string TextoDescritivo { get; set; }
        [Required]
        [Column("foto")]

        public string Foto { get; set; }
        [Required]
        [Column("video")]

        public string Video { get; set; }

        [InverseProperty("IdexerciciosGinasioNavigation")]
        public virtual ICollection<Inclui> Inclui { get; set; }
    }
}
[表(“Exercicios\u Ginasio”)]
公共部分类exerciosginasio
{
公共事业
{
Inclui=新的HashSet();
}
[关键]
[专栏(“IDExercicios_Ginasio”)]
公共int-idexerciosginasio{get;set;}
[必需]
[列(“名称”)]
[行政长官(30)]
公共字符串Nome{get;set;}
[必需]
[列(“文本描述”)]
[长度(1000)]
公共字符串TextoDescritivo{get;set;}
[必需]
[栏目(“foto”)]
公共字符串Foto{get;set;}
[必需]
[栏目(“视频”)]
公共字符串视频{get;set;}
[逆属性(“Idexerciosginasionavigation”)]
公共虚拟ICollection Inclui{get;set;}
}
}
在属于Exercises类(exercisecontroller)的控制器中,我使用此方法来创建新的练习

 [HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<IActionResult> Create([Bind("IdexerciciosGinasio,Nome,TextoDescritivo,Foto,Video")] ExerciciosGinasio exerciciosGinasio, IFormFile fotografia,IFormFile video)
        {
            string caminho = Path.Combine(_hostEnviroment.ContentRootPath, "wwwroot\\Exercicios");

            string nome_ficheiro = Path.GetFileName(fotografia.FileName);
            string caminho_completo = Path.Combine(caminho, nome_ficheiro);

            FileStream fs = new FileStream(caminho_completo, FileMode.Create);
            fotografia.CopyTo(fs);
            exerciciosGinasio.Foto = caminho_completo;
            fs.Close();




            string caminho2 = Path.Combine(_hostEnviroment.ContentRootPath, "wwwroot\\Exercicios");

            string nome_ficheiro2 = Path.GetFileName(video.FileName);
            string caminho_completo2 = Path.Combine(caminho2, nome_ficheiro2);

            FileStream _fs = new FileStream(caminho_completo2, FileMode.Create);
            video.CopyTo(_fs);
            exerciciosGinasio.Video = caminho_completo2;
            _fs.Close();

            if (ModelState.IsValid)
            {

                _context.Add(exerciciosGinasio);
                await _context.SaveChangesAsync();
                return RedirectToAction(nameof(Index));
            }
            return View(exerciciosGinasio);
        }
[HttpPost]
[ValidateAntiForgeryToken]
公共异步任务创建([Bind(“idexerciosginasio,Nome,TextoDescritivo,Foto,Video”)]exerciosginasio exerciosginasio,ifformfile fotografia,ifformfile Video)
{
字符串caminho=Path.Combine(_hostenviromet.ContentRootPath,“wwwroot\\exercios”);
字符串nome_ficheiro=Path.GetFileName(fotografia.FileName);
字符串caminho_completo=Path.Combine(caminho,nome_ficheiro);
FileStream fs=newfilestream(caminho_completo,FileMode.Create);
fotografia.CopyTo(fs);
exerciciosGinasio.Foto=caminho_completo;
fs.Close();
字符串caminho2=Path.Combine(_hostenviromet.ContentRootPath,“wwwroot\\exercios”);
字符串nome_ficheiro2=Path.GetFileName(video.FileName);
字符串caminho_completo2=Path.Combine(caminho,nome_ficheiro2);
FileStream\u fs=newfilestream(caminho\u completo2,FileMode.Create);
视频。复制到(_fs);
exerciosginasio.Video=caminho_completo 2;
_fs.Close();
if(ModelState.IsValid)
{
_添加(exerciosginasio);
wait_context.SaveChangesAsync();
返回重定向到操作(名称(索引));
}
返回视图(exerciosginasio);
}
根据这种方法,我有

@model WebApplication1.Models.ExerciciosGinasio

@{
    ViewData["Title"] = "Create";
}


<h4>Criar Exercicio</h4>
<hr />
<div class="row">
    <div class="col-md-4">
        <form asp-action="Create" enctype="multipart/form-data">
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
            <div class="form-group">
                <label asp-for="Nome" class="control-label"></label>
                <input asp-for="Nome" class="form-control" />
                <span asp-validation-for="Nome" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="TextoDescritivo" class="control-label"></label>
                <input asp-for="TextoDescritivo" type="text" class="form-control" />
                <span asp-validation-for="TextoDescritivo" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Foto" class="control-label"></label>
                <input asp-for="Foto" type="file" class="form-control" accept=".png, .jpg, .bmp" value="" />
                @*<span asp-validation-for="Foto" class="text-danger"></span>*@

                <div>
                    <input type="hidden" name="fotografia" value="0" />
                </div>
                <div class="form-group">
                    <label asp-for="Video" class="control-label"></label>
                    <input asp-for="Video" type="file" class="form-control" />
                    @*<span asp-validation-for="Video" class="text-danger"></span>*@
                </div>
                <div>
                    <input type="hidden" name="video" value="0" />
                </div>
                <div class="form-group">
                    <input type="submit" value="Create" class="btn btn-primary" />
                </div>
        </form>
    </div>
</div>
<br />

<div>
    <a asp-action="Index" asp-controller="Home">Voltar</a>
</div>

@section Scripts {
    @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}
@model WebApplication1.Models.exerciosginasio
@{
ViewData[“标题”]=“创建”;
}
循环练习

@**@ @**@
沃尔特 @节脚本{ @{wait Html.RenderPartialAsync(“_validationScript”);} }
有人知道是什么导致了这个错误吗?我该怎么解决

NullReferenceException:对象引用未设置为对象的实例

字符串nome_ficheiro=Path.GetFileName(fotografia.FileName)

在您的查看页面中,我们可以发现您正在为
fotografia
video
使用默认值为0的隐藏字段,但您的Create操作需要通过
ifformfile
对象创建文件,如果调试代码,您会发现
fotografia
null,读取
fotografia
FileName属性时会导致异常

要修复它,您可以修改如下代码

照片和视频的输入

测试结果


这是否回答了您的问题?
<div class="form-group">
    <label asp-for="Foto" class="control-label"></label>
    <input type="file" class="form-control" name="fotografia" accept=".png, .jpg, .bmp" />
</div>
<div>
    <input type="hidden" name="Foto" value="0" />
</div>
<div class="form-group">
    <label asp-for="Video" class="control-label"></label>
    <input type="file" name="fvideo" class="form-control" />
</div>
<div>
    <input type="hidden" name="Video" value="0" />
</div>
[HttpPost]
public IActionResult Create([Bind("IdexerciciosGinasio,Nome,TextoDescritivo,Foto,Video")] ExerciciosGinasio exerciciosGinasio, 
    IFormFile fotografia, 
    IFormFile fvideo)
{
    string nome_ficheiro = Path.GetFileName(fotografia.FileName);

    //code logic here

        
    return View(exerciciosGinasio);
}