#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. У разработчика нет такой опции.