LINQ не предоставляет тип данных byte[] для хранения файлов

#c# #asp.net #asp.net-mvc-3 #linq-to-sql

#c# #asp.net #asp.net-mvc-3 #linq-to-sql

Вопрос:

Я пытаюсь сохранить файл в базе данных SQL Server и использую ASP.NET MVC 3 с LINQ to SQL на C #. Когда я пытаюсь установить тип данных столбца в byte[], он говорит, что это недопустимый тип данных. Использование вместо этого типа данных vrabinary (MAX) кажется логичным решением.

Цель состоит в том, чтобы хранить файлы PDF в базе данных, которую пользователь выбрал для загрузки с помощью средства загрузки файлов HTTP. Ошибка возникает при назначении переменной-члена LINQ, которая ссылается на столбец, в котором должен храниться файл.

Ошибка 3 Не удается неявно преобразовать тип ‘System.Web.HttpPostedFileBase’ в ‘System.Data.Linq.Binary’ C:UsersAaron ПаттенДокументы Visual Studio 2010 Проекты MyApp MyApp Контроллеры 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);
    }
  

Как правильно поступить со всем этим?

PS: Как мне отобразить PDF-файл как встроенный объект, не сохраняя его на сервере?

D.A.P.

Ответ №1:

Сообщение об ошибке сообщает вам, что не так… вы устанавливаете Content=hpf. hpf — это HttpPostedFileBase, поэтому сначала его необходимо преобразовать в byte[]. Сделайте это, прочитав byte[] из потока hpf.

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

Ответ №2:

В вашем конструкторе объектов LINQ to SQL измените поле, вызывающее проблемы, с System.Data.Linq.Binary на тип System.Byte[] . Преобразование будет неявным при отправке.

введите описание изображения здесь

Комментарии:

1. У разработчика нет такой опции.