如何将图像插入sql server数据库?

2023-10-09数据库问题
3

本文介绍了如何将图像插入sql server数据库?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

如前所述,我试图在表格中插入一个图像,其中字段的类型是 Varbinary.

到目前为止我做了什么:

我有一个包含许多字段的表单:

@using (Html.BeginForm("InsertProduct", "Home", FormMethod.Post, new { enctype = "multipart/form-data" })){@Html.ValidationSummary(true)<字段集><legend>产品</legend><div class="editor-label">@Html.LabelFor(model => model.PRODUCT_ID)

<div class="editor-field">@Html.EditorFor(model => model.PRODUCT_ID)@Html.ValidationMessageFor(model =>model.PRODUCT_ID)

<div class="editor-label">@Html.LabelFor(model =>model.PRODUCT_NAME)

<div class="editor-field">@Html.EditorFor(model =>model.PRODUCT_NAME)@Html.ValidationMessageFor(model =>model.PRODUCT_NAME)

<div class="editor-label">@Html.LabelFor(model => model.PRODUCT_IMAGE)

<div class="editor-field"><input type="file" name="PRODUCT_IMAGE" id="PRODUCT_IMAGE" style="width: 100%;"/>

<p><input type="submit" value="Create" class="btn btn-primary"/></p></fieldset>}

所有这些字段都允许我在我的控制器中构造一个 PRODUCT 对象:

public ActionResult InsertProduct(PRODUCT ord){已发送迁移实体 1 = 新迁移实体 1();sent.PRODUCT.Add(ord);sent.SaveChanges();列表<产品>产品 = sent.PRODUCT.ToList();返回视图(产品",产品);}

但是当我尝试上传图像时(通过单击创建"按钮),我有以下内容:

<块引用>

条目不是有效的 base64 字符串,因为它包含一个字符这不是基数 64

所以首先:这是处理图像的正确方法,其次,我想我需要对我的图像进行预处理以插入它:如何做到这一点?

谢谢!

<小时>

感谢收到的答案,似乎适合插入.但是对于显示,我仍然有问题(仅显示未找到的图像"图).我尝试通过两种方式做到这一点:1.并在控制器中

public Image LoadImage(int id){String serviceAddress = ConfigurationManager.AppSettings["WCFADDRESS"];DataServiceContext context = new DataServiceContext(new Uri(serviceAddress));PRODUCT product = context.Execute(new Uri(serviceAddress + "prod_id?prod_id=" + id)).ToList().FirstOrDefault();MemoryStream ms = new MemoryStream(product.PRODUCT_IMAGE);图像 img = Image.FromStream(ms);返回图像;}

还有 2.:

@{if (Model.product.PRODUCT_IMAGE != null){WebImage wi = new WebImage(Model.product.PRODUCT_IMAGE);wi.Resize(700, 700,true, true);wi.Write();}}

但是他们都没有工作.我究竟做错了什么 ?

解决方案

1) 更改您的数据库表以包含以下列:

1: ProductImage - varbinary(MAX)2:ImageMimeType - varchar(50)

2) 像这样改变你的行动方法:

public ActionResult InsertProduct(PRODUCT ord,HttpPostedFileBase PRODUCT_IMAGE){如果(模型状态.IsValid){MigrationEntities1 sent = new MigrationEntities1();如果(图像!= null){ord.ProductImage=新字节[PRODUCT_IMAGE.ContentLength];ord.ImageMimeType = PRODUCT_IMAGE.ContentType;PRODUCT_IMAGE.InputStream.Read(ord.ProductImage, 0,PRODUCT_IMAGE.ContentLength);}别的{//设置默认图片:图像 img = Image.FromFile(Server.MapPath(Url.Content("~/Images/Icons/nopic.png")));MemoryStream ms = new MemoryStream();img.Save(ms, ImageFormat.Png);//改成其他格式ms.Seek(0, SeekOrigin.Begin);ord.ProductImage=新字节[ms.Length];ord.ImageMimeType=图像/png";ms.Read(ord.Pic, 0, (int)ms.Length);}尝试{sent.PRODUCT.Add(ord);sent.SaveChanges();ViewBag.HasError = "0";ViewBag.DialogTitle = "插入成功";ViewBag.DialogText = "...";}抓住{ViewBag.HasError = "1";ViewBag.DialogTitle = "服务器错误!";ViewBag.DialogText = "...";}列表<产品>产品 = sent.PRODUCT.ToList();返回视图(产品",产品);}返回视图(顺序);}

此操作方法仅用于创建.你也需要一些编辑和索引工作.如果你在做它们时遇到问题,请告诉我将它们的代码添加到答案中.

更新:如何显示图像:

显示存储图像的一种方式如下:

1) 将此操作方法添加到您的控制器:

 [AllowAnonymous]公共文件内容结果 GetProductPic(int id){产品 p = db.PRODUCTS.FirstOrDefault(n => n.ID == id);如果(p != 空){返回文件(p.ProductImage,p.ImageMimeType);}别的{返回空;}}

2) 在视图的 @foreach(...) 结构中添加一个 <img> 标记(或您想要的任何地方),如下所示:>

<img width="100" height="100" src="@Url.Action("GetProductPic", "Products", routeValues: new { id = item.ID })"/>

As said, i'm trying to insert an image in a table, where the type of the field is Varbinary.

What i've done so far :

I've a form with many fields:

@using (Html.BeginForm("InsertProduct", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    @Html.ValidationSummary(true)

    <fieldset>
        <legend>PRODUCT</legend>

        <div class="editor-label">
            @Html.LabelFor(model => model.PRODUCT_ID)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.PRODUCT_ID)
            @Html.ValidationMessageFor(model => model.PRODUCT_ID)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.PRODUCT_NAME)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.PRODUCT_NAME)
            @Html.ValidationMessageFor(model => model.PRODUCT_NAME)
        </div>
        <div class="editor-label">
            @Html.LabelFor(model => model.PRODUCT_IMAGE)
        </div>
        <div class="editor-field">
            <input type="file" name="PRODUCT_IMAGE" id="PRODUCT_IMAGE" style="width: 100%;" />
        </div>

        <p>
            <input type="submit" value="Create" class="btn btn-primary"/>
        </p>
    </fieldset>
}

And all these fields allow me to construct a PRODUCT object in my controller :

public ActionResult InsertProduct(PRODUCT ord)
    {
        MigrationEntities1 sent = new MigrationEntities1();
        sent.PRODUCT.Add(ord);
        sent.SaveChanges();
        List<PRODUCT> Products = sent.PRODUCT.ToList();
        return View("Products", Products);
    }

But when i'm trying to upload the image (by clicking on Create button), i've the following :

entry is not a valid base64 string because it contains a character that is not base 64

So first of all : is it the right way to deal with images and second, I think I need to do a pre-treatemant on my image to insert it : how to o that ?

Thanks !


Edit :

Thanks to answers received, seems to be good for insertion. But for displaying, I still have issues (only the "not found image" piture is displayed). I've try to do it two ways : 1. <img src="LoadImage?id=@Model.product.PRODUCT_ID"/> and in the controller

public Image LoadImage(int id)
    {
        String serviceAddress = ConfigurationManager.AppSettings["WCFADDRESS"];
        DataServiceContext context = new DataServiceContext(new Uri(serviceAddress));
        PRODUCT product = context.Execute<PRODUCT>(new Uri(serviceAddress + "prod_id?prod_id=" + id)).ToList().FirstOrDefault();

        MemoryStream ms = new MemoryStream(product.PRODUCT_IMAGE);
        Image img = Image.FromStream(ms);
        return img;
    }

And 2. :

@{

    if (Model.product.PRODUCT_IMAGE != null)
    {
        WebImage wi = new WebImage(Model.product.PRODUCT_IMAGE);
        wi.Resize(700, 700,true, true);
        wi.Write();
    }    
}

But none of them are working. What am I doing wrong ?

解决方案

1) Change your database table to have these columns:

1: ProductImage - varbinary(MAX)
2: ImageMimeType - varchar(50)

2) Change your action method like this:

public ActionResult InsertProduct(PRODUCT ord, 
    HttpPostedFileBase PRODUCT_IMAGE)
{        
    if (ModelState.IsValid)        
        {
            MigrationEntities1 sent = new MigrationEntities1();
            if (image != null)
            {
                ord.ProductImage= new byte[PRODUCT_IMAGE.ContentLength];
                ord.ImageMimeType = PRODUCT_IMAGE.ContentType;
                PRODUCT_IMAGE.InputStream.Read(ord.ProductImage, 0,
                    PRODUCT_IMAGE.ContentLength);
            }

            else
            {
                // Set the default image:
                Image img = Image.FromFile(
                    Server.MapPath(Url.Content("~/Images/Icons/nopic.png")));
                MemoryStream ms = new MemoryStream();
                img.Save(ms, ImageFormat.Png); // change to other format
                ms.Seek(0, SeekOrigin.Begin);
                ord.ProductImage= new byte[ms.Length];
                ord.ImageMimeType= "image/png";
                ms.Read(ord.Pic, 0, (int)ms.Length);
            }

            try
            {
                sent.PRODUCT.Add(ord);
                sent.SaveChanges();

                ViewBag.HasError = "0";
                ViewBag.DialogTitle = "Insert successful";
                ViewBag.DialogText = "...";
            }
            catch
            {
                ViewBag.HasError = "1";
                ViewBag.DialogTitle = "Server Error!";
                ViewBag.DialogText = "...";
            }

            List<PRODUCT> Products = sent.PRODUCT.ToList();
            return View("Products", Products);
        }

        return View(ord);
    }

This action method is just for create. you need some works for edit and index too. If you have problem to doing them, tell me to add codes of them to the answer.

Update: How to show images:

One way to show stored images is as the following:

1) Add this action method to your controller:

    [AllowAnonymous]
    public FileContentResult GetProductPic(int id)
    {
        PRODUCT p = db.PRODUCTS.FirstOrDefault(n => n.ID == id);
        if (p != null)
        {
            return File(p.ProductImage, p.ImageMimeType);
        }

        else
        {
            return null;
        }
    }

2) Add a <img> tag in the @foreach(...) structure of your view (or wherever you want) like this:

<img width="100" height="100" src="@Url.Action("GetProductPic", "Products", routeValues: new { id = item.ID })" />

这篇关于如何将图像插入sql server数据库?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

The End

相关推荐

按天分组的 SQL 查询

按天分组的 SQL 查询

SQL query to group by day(按天分组的 SQL 查询)...
2024-04-16 数据库问题
77

在 Group By 查询中包含缺失的月份

在 Group By 查询中包含缺失的月份

Include missing months in Group By query(在 Group By 查询中包含缺失的月份)...
2024-04-16 数据库问题
12

sql group by 与不同

sql group by 与不同

sql group by versus distinct(sql group by 与不同)...
2024-04-16 数据库问题
37

如何在SQL中返回每个组的增量组号

如何在SQL中返回每个组的增量组号

How to return a incremental group number per group in SQL(如何在SQL中返回每个组的增量组号)...
2024-04-16 数据库问题
8

统计分组返回的记录数

统计分组返回的记录数

Count number of records returned by group by(统计分组返回的记录数)...
2024-04-16 数据库问题
10

带聚合函数的 SQL GROUP BY CASE 语句

带聚合函数的 SQL GROUP BY CASE 语句

SQL GROUP BY CASE statement with aggregate function(带聚合函数的 SQL GROUP BY CASE 语句)...
2024-04-16 数据库问题
23

热门文章

1ORA-01747: 无效的 user.table.column、table.column 或列规范 2ORA-01461: 只能为插入到 LONG 列而绑定 LONG 值-查询时发生 3INSERT 语句与 FOREIGN KEY 约束冲突 4MySql 错误:无法更新存储函数/触发器中的表,因为它已被调用此存储函数/触发器的语句使用 5MySQL:将逗号分隔的列表拆分为多行 6sqlite3 在数据库中插入和读取 BLOB 数据 7ORA-01830:日期格式图片在转换整个输入字符串之前结束/选择日期查询的总和 8MySQL 错误:UPDATE 和 LIMIT 的错误使用

热门精品源码

最新VIP资源

1多功能实用站长工具箱html功能模板 2多风格简历在线生成程序网页模板 3论文相似度查询系统源码 4响应式旅游景点宣传推广页面模板 5在线起名宣传推广网站源码 6酷黑微信小程序网站开发宣传页模板 7房产销售交易中介网站模板 8小学作业自动生成程序