ASP.Net MVC将文件上传到数据库

时间:2018-02-09 16:16:43

标签: c# asp.net asp.net-mvc

我想将文件插入数据库,我的控制器中有这个代码:

public ActionResult Create(CertificationViewModel vm, HttpPostedFileBase file)
{
    try 
    {
        CertificationDetail ds = new CertificationDetail();

        if(ModelState.IsValid) 
        {
            ds.CertificationTypeId = vm.CertificationTypeId;
            ds.StatusId = vm.StatusId;
            ds.Result = vm.Result;
            vm.FileName = file.FileName;
            ds.pdf = new byte[file.ContentLength];
            file.InputStream.Read(vm.pdf, 0, file.ContentLength);
        }

        return View(vm);
    }
}

我在数据库中的文件是VarBinary(3600),模型中的文件是`byte []。

当我尝试在数据库中插入一些东西时,它变为空,它首先进入DAL以获得确认,然后是,它被插入到数据库中。

有人可以检测到我的代码中的任何错误吗?

1 个答案:

答案 0 :(得分:2)

如果此代码与您的代码相同,并且您的CertificationDetail类是您的数据库模型,则在调用InputStream.Read时会出现逻辑错误。

InputStream.Read CertificationDetail获取第一个参数:

  

缓冲   键入:System.Byte []

     

一个字节数组。当此方法返回时,缓冲区包含指定的字节数组,其值介于offset和(offset +   count - 1)替换为从当前源读取的字节。

因此,基本上,您将覆盖ViewModel中的缓冲区数组,但不会覆盖InputStream.Read类中的缓冲区数组。您需要将byte[]的第一个参数设置为要将字节保存到的InputStream.Read

file.InputStream.Read(ds.pdf, 0, file.ContentLength)调用更改为以下内容:CertificationDetail,如果Get-Process | Where-Object { $_.cpu -gt 10} | Format-Table -AutoSize -Property "ProcessName", "CPU", "Id" 是用于保存到数据库中的内容,则应将保存修复到数据库中。