Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.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# 将图像上载到数据库返回null或错误_C#_Asp.net_Entity Framework_Asp.net Core - Fatal编程技术网

C# 将图像上载到数据库返回null或错误

C# 将图像上载到数据库返回null或错误,c#,asp.net,entity-framework,asp.net-core,C#,Asp.net,Entity Framework,Asp.net Core,几个小时以来,我一直在尝试编写一个允许将照片上载到数据库的代码,但要么没有向数据库添加任何内容,要么导致错误: [filename]值无效 我的Restauracja.cs文件: [Required(ErrorMessage = "Wybierz plik")] [MaxLength(30, ErrorMessage = "vxvxcvcxvxxx")] [Display(Name = "Zdjecia")] public string LinkZdjecia { get; set; } [D

几个小时以来,我一直在尝试编写一个允许将照片上载到数据库的代码,但要么没有向数据库添加任何内容,要么导致错误:

[filename]值无效

我的Restauracja.cs文件:

[Required(ErrorMessage = "Wybierz plik")]
[MaxLength(30, ErrorMessage = "vxvxcvcxvxxx")]
[Display(Name = "Zdjecia")]
public string LinkZdjecia { get; set; }

[Display(Name = "Zdjecia")]
public byte[] Photo { get; set; }
控制器餐厅cjacontroller.cs

public class RestauracjaController : Controller
{
    private readonly FirmaContext _context;

    public RestauracjaController(FirmaContext context)
    {
        _context = context;
    }

   public async Task<IActionResult> Create(Restauracja restauracja, List<IFormFile> Photo)
    {
        foreach (var item in Photo)
        {
            if (item.Length > 0)
            {
                using (var stream = new MemoryStream())
                {
                    await item.CopyToAsync(stream);
                    restauracja.Photo = stream.ToArray();
                }
            }
        }

        return View(restauracja);
    }
}
<form asp-action="Create">
  <div class="form-group">
                <label asp-for="LinkZdjecia" class="control-label"></label>
                <input asp-for="LinkZdjecia" class="form-control" />
                <span asp-validation-for="LinkZdjecia" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Photo" class="control-label"></label>
                <input name="Image" id="Imageinput" class="form-control" type="file" />
                <span asp-validation-for="Photo" class="text-danger"></span>
            </div>

            <div class="form-group">
                <input type="submit" value="Create" class="btn btn-primary" />
            </div>
</form>
 public async Task<IActionResult> Create(Restauracja restauracja, IFormFile Image)
    {
        if (ModelState.IsValid)
        {
            using (var ms = new MemoryStream())
            {
                Image.CopyTo(ms);
                restauracja.Photo = ms.ToArray();
            }

            _context.Add(restauracja);
            await _context.SaveChangesAsync();
            return RedirectToAction(nameof(Index));
        }
        return View(restauracja);
    }
请尝试以下代码:

public class RestauracjaController : Controller
{
    private readonly FirmaContext _context;

    public RestauracjaController(FirmaContext context)
    {
        _context = context;
    }

   public async Task<IActionResult> Create(Restauracja restauracja, List<IFormFile> Photo)
    {
        foreach (var item in Photo)
        {
            if (item.Length > 0)
            {
                byte[] result = null;
                using (var readStream = item.OpenReadStream())
                using (var stream = new MemoryStream())
                {
                    readStream.CopyTo(stream);
                    result = readStream.ToArray();

                    //restauracja.Photo = result;
                    //_context.Add(restauracja);
                }
            }
        }

        return View(restauracja);
    }
公共类餐厅cja控制器:控制器
{
私有只读FirmaContext\u上下文;
公共餐厅cjacontroller(FirmaContext上下文)
{
_上下文=上下文;
}
公共异步任务创建(Restauracja Restauracja,列表照片)
{
foreach(照片中的var项目)
{
如果(item.Length>0)
{
字节[]结果=空;
使用(var readStream=item.OpenReadStream())
使用(var stream=new MemoryStream())
{
readStream.CopyTo(流);
结果=readStream.ToArray();
//restauracja.Photo=结果;
//_添加(restauracja);
}
}
}
返回视图(restauracja);
}
}请尝试以下代码:

public class RestauracjaController : Controller
{
    private readonly FirmaContext _context;

    public RestauracjaController(FirmaContext context)
    {
        _context = context;
    }

   public async Task<IActionResult> Create(Restauracja restauracja, List<IFormFile> Photo)
    {
        foreach (var item in Photo)
        {
            if (item.Length > 0)
            {
                byte[] result = null;
                using (var readStream = item.OpenReadStream())
                using (var stream = new MemoryStream())
                {
                    readStream.CopyTo(stream);
                    result = readStream.ToArray();

                    //restauracja.Photo = result;
                    //_context.Add(restauracja);
                }
            }
        }

        return View(restauracja);
    }
公共类餐厅cja控制器:控制器
{
私有只读FirmaContext\u上下文;
公共餐厅cjacontroller(FirmaContext上下文)
{
_上下文=上下文;
}
公共异步任务创建(Restauracja Restauracja,列表照片)
{
foreach(照片中的var项目)
{
如果(item.Length>0)
{
字节[]结果=空;
使用(var readStream=item.OpenReadStream())
使用(var stream=new MemoryStream())
{
readStream.CopyTo(流);
结果=readStream.ToArray();
//restauracja.Photo=结果;
//_添加(restauracja);
}
}
}
返回视图(restauracja);
}

}

正如@T.S.在对您的问题的第一条评论中所说,您的代码有很多潜在的问题,因此,如果不进行完整的代码审查,就很难回答,因为这超出了您的范围。以下是我可以看到的一些问题:

  • Photo
    的类型应该是
    ifformfile
    而不是
    byte[]

  • 为什么
    创建
    操作需要第二个参数
    列表照片
    ?如果需要多个图像,请将make
    Restauracja.Photo
    更改为
    IEnumerable
    ,并删除
    Create
    中的第二个参数。但现在,从一个图像开始,让它工作,然后尝试将其更改为多个图像

  • 为什么要给
    输入
    名称
    图像
    ?模型中没有这样的属性。将其更改为
    Photo
    并使用标记帮助器

  • 像这样:

    <input asp-for="Photo" class="form-control" />
    
    
    

    还有其他问题,但是上面的问题会让你继续。

    就像@T.S.在对你的问题的第一次评论中所说的,你的代码有很多潜在的问题,因此如果不进行全面的代码审查就很难回答,因为这超出了范围。以下是我可以看到的一些问题:

  • Photo
    的类型应该是
    ifformfile
    而不是
    byte[]

  • 为什么
    创建
    操作需要第二个参数
    列表照片
    ?如果需要多个图像,请将make
    Restauracja.Photo
    更改为
    IEnumerable
    ,并删除
    Create
    中的第二个参数。但现在,从一个图像开始,让它工作,然后尝试将其更改为多个图像

  • 为什么要给
    输入
    名称
    图像
    ?模型中没有这样的属性。将其更改为
    Photo
    并使用标记帮助器

  • 像这样:

    <input asp-for="Photo" class="form-control" />
    
    
    

    还有其他问题,但上面的问题会让您继续。

    这个问题听起来像是“这是我所有的代码,出了什么问题?”。请专注于导致错误的特定部分。我在控制器中创建breakpint和create方法,Photo为null。但我不知道why@JohnMeek谢谢,它解决了我的问题这个问题听起来像,“这是我所有的代码,怎么了?”。请专注于导致错误的特定部分。我在控制器中创建breakpint和create方法,Photo为null。但我不知道why@JohnMeek谢谢,它解决了我的问题我可以在数据库照片类型文件中创建吗?不,模型
    Restauracja
    用于视图,而不是数据库。
    IFormFile
    用于将文件上载到服务器。然后,
    Create
    操作获取
    ifformfile
    并将其转换为字节数组以保存在数据库中。不要直接在数据库中使用视图模型,因为视图与数据库有不同的需求。因此,您需要为数据库创建另一个模型,并且在
    创建
    操作中,您将
    Restauracja
    模型转换为数据库模型,然后将其传递到
    \u上下文
    。我可以在数据库照片类型文件中创建吗?不,模型
    Restauracja
    用于视图,而不是数据库。
    IFormFile
    用于将文件上载到服务器。然后,
    Create
    操作获取
    ifformfile
    并将其转换为字节数组以保存在数据库中。不要直接在数据库中使用视图模型,因为视图与数据库有不同的需求。因此,您需要数据库的另一个模型,并且在
    创建
    操作中,您将
    Restauracja
    模型转换为数据库模型,然后将其传递给
    \u上下文