LINQ不提供用于存储文件的byte []数据类型

时间:2011-10-12 18:38:06

标签: c# asp.net asp.net-mvc-3 linq-to-sql

我正在尝试将文件存储在SQL Server数据库中,并且在C#中使用带有LINQ to SQL的ASP.NET MVC 3。当我尝试将列的数据类型设置为byte []时,它表示这是一种无效的数据类型。使用vrabinary(MAX)数据类型似乎是合乎逻辑的事情。

目标是将PDF文件存储在用户选择使用HTTP文件上传器上传的数据库中。在分配LINQ成员变量期间发生错误,该变量引用要存储文件的列。

  

错误3无法将类型'System.Web.HttpPostedFileBase'隐式转换为'System.Data.Linq.Binary'C:\ Users \ Aaron Patten \ Documents \ Visual Studio 2010 \ Projects \ MyApp \ MyApp \ Controllers \ MyController。 cs 66 31 MyApp

我没有发现其他人遇到这个问题的方式太多,所以我认为必须有一些我想念的东西,这对于任何人来说都太过分了。

我的控制器:

    public ActionResult UploadPDF()
    {
        List<ViewDataUploadFilesResult> r = new List<ViewDataUploadFilesResult>();

        HttpPostedFileBase hpf;// = Request.Files[file] as HttpPostedFileBase;

        foreach (string file in Request.Files)
        {
            hpf = Request.Files[file] as HttpPostedFileBase;
            if (hpf.ContentLength == 0)
                continue;
            string savedFileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "images\\" + Path.GetFileName(hpf.FileName));
            hpf.SaveAs(savedFileName);

            r.Add(new ViewDataUploadFilesResult()
            {
                Name = savedFileName,
                Length = hpf.ContentLength
            });
        }

        MyApp.Models.MyAppDataContext db = new MyApp.Models.MyAppDataContext();

        MyApp.Models.PDFFile myPDFFile = new MyApp.Models.PDFFile();

        myPDFFile.Content = hpf;
        db.questions.InsertOnSubmit(myPDFFile);
        db.SubmitChanges();

        return View("UploadPDF", r);
    }

实现这一切的正确方法是什么?

P.S。:如何将PDF显示为嵌入对象而不将其保存到服务器?

D.A.P。

2 个答案:

答案 0 :(得分:7)

错误消息告诉您出错了...您正在设置Content = hpf。 hpf是一个HttpPostedFileBase,所以它首先需要转换为byte []。通过从hpf的流中读取byte []来做到这一点。

myPDFFile.Content = new BinaryReader(hpf.InputStream).ReadBytes(hpf.InputStream.Length)

答案 1 :(得分:0)

在LINQ to SQL实体设计器中更改字段,从System.Data.Linq.BinarySystem.Byte[]类型会给您带来麻烦。转换将在提交时隐含。

enter image description here