ASP.Net jQuery网络摄像头图像数据库varbinary(最大)

本文关键字:varbinary 最大 图像数据库 摄像头 Net jQuery 网络 ASP | 更新日期: 2023-09-27 18:16:43

我已经编写了Javascript,从网络摄像头捕获图像,然后我想将其序列化到我的SQL Server数据库。数据库中的字段是通常的varbinary(max)。我可以从firebug看到原始图像正在传递给我的web方法,但它一直抛出以下错误:

"Insert of '797719006-' failed: Telerik.OpenAccess.RT.sql.SQLException: Cannot Insert value NULL into column 'Picture', table 'GoldStar.Students.Pictures';

捕获图像的javascript绝对工作得很好,所以我知道那里没有问题,这只是一个将其保存到数据库的问题。也许我是过于复杂的事情更新与web方法通过ajax??

我已经在我的注册页面上创建了一个web启用方法,它看起来像这样:

    [WebMethod(EnableSession = true)]
    public static void UpdatePicture(object picture)
    {
        //Check if the user already has a picture in the database.
        using (var dataContext = new DAL.GoldStarModel())
        {
            var userPictures = (from p in dataContext.Pictures
                                where p.UserId == (Guid) Membership.GetUser().ProviderUserKey
                                select p);
            if (userPictures.Count() > 0)
            {
                //If user already has a picture then update.
                userPictures.First().Picture = picture as byte[];
            }
            else
            {
                //If User does NOT have a picture then add one.
                dataContext.Add(new Students.Pictures()
                                    {
                                        UserId = (Guid) Membership.GetUser().ProviderUserKey,
                                        Picture = picture as byte[],
                                        CreationDate = DateTime.Now
                                    });
            }
            dataContext.SaveChanges();
        }

相关的Javascript代码如下:

                var canvas = document.getElementById("canvas");
                var profilePic = $('#profilePic')
                $('#webcam').hide();
                try {
                    //Update the profile picture in the parent.
                    var currentPic = self.parent.document.getElementById('MainContent_UserFormView_RegisterUser_StudentPicture');
                    var oldWidth = Number(currentPic.width);
                    var oldHeight = Number(currentPic.height);
                    currentPic.src = canvas.toDataURL();
                    currentPic.width = oldWidth;
                    currentPic.height = oldHeight;
                    profilePic.show();
                    $.ajax({
                        type: "POST",
                        url: "/Account/Register.aspx/UpdatePicture",
                        contentType: "application/json; charset=utf-8",
                        data: "{'picture': '" + currentPic.src + "'}",
                        dataType: "json",
                        success: function (result) {
                            //ApplyTemplate(result)
                        }
                    });
                }

ASP.Net jQuery网络摄像头图像数据库varbinary(最大)

您是否使用过fiddler之类的工具来检查传输的内容,因为乍一看,它只是图像的字符串路径,而不是图像数据。

在服务器上,你不能仅仅从一个对象强制转换为一个字节数组,除非你已经有了一个字节数组,在这种情况下使用它作为类型。同样,从您的代码中可以看出,jquery不太可能将二进制数据数组传递给您的方法。

我怀疑你需要Silverlight或Flash之类的东西来上传图像数据。html沙箱在向服务器发送文件数据时非常困难。

您需要解析字符串。你有你需要的一切,这很好。您需要查找base64字符串的起始位置。取base64字符串&使用转换。FromBase64String它会给你一个字节数组,这是你的图像。

我会改变你的webmethod接受字符串,因为这是由画布生成的。