0

我有使用签名板数据创建签名 bmp 图像并将其保存到文件位置的工作代码。我的问题是:如何修改此代码以将图像插入 SQL Server 2008 图像字段?

我的控制器中的以下内容从签名板获取签名数据并创建 bmp 图像并将其保存到文件位置。

        [PrincipalPermission(SecurityAction.Demand, Authenticated = true)]
    public ActionResult SaveSignature2(IPrincipal principal) {
        int userId = ((ScoutIdentity)principal.Identity).UserId.Value;
        //Put user code to initialize the page here
        SIGPLUSLib.SigPlus sigObj = new SIGPLUSLib.SigPlus();
        sigObj.InitSigPlus();
        sigObj.AutoKeyStart();

        string visitorname = Request.Form["visitorname"];
        visitorname = visitorname.Replace(" ", ""); //combines the first name with last name with no spaces
        visitorname = visitorname.Trim();
        string thevrvIDstr = Request.Form["vrvID"];
        int thevrvID = Convert.ToInt32(thevrvIDstr);

        //use the same data to decrypt signature
        sigObj.AutoKeyData = Request.Form["SigText"];

        sigObj.AutoKeyFinish();
        sigObj.SigCompressionMode = 1;
        sigObj.EncryptionMode = 2;

        //Now, get sigstring from client
        //Sigstring can be stored in a database if 
        //a biometric signature is desired rather than an image
        sigObj.SigString = Request.Form["hidden"];

        if (sigObj.NumberOfTabletPoints() > 0) {
            sigObj.ImageFileFormat = 0;
            sigObj.ImageXSize = 500;
            sigObj.ImageYSize = 150;
            sigObj.ImagePenWidth = 8;
            sigObj.SetAntiAliasParameters(1, 600, 700);
            sigObj.JustifyX = 5;
            sigObj.JustifyY = 5;
            sigObj.JustifyMode = 5;
            long size;
            byte[] byteValue;
            sigObj.BitMapBufferWrite();
            size = sigObj.BitMapBufferSize();
            byteValue = new byte[size];
            byteValue = (byte[])sigObj.GetBitmapBufferBytes();
            sigObj.BitMapBufferClose();
            System.IO.MemoryStream ms = new System.IO.MemoryStream(byteValue);
            System.Drawing.Image img = System.Drawing.Image.FromStream(ms);
            String path;
            path = System.AppDomain.CurrentDomain.BaseDirectory;
            path = path + "/uploadFiles/Signatures/"+thevrvIDstr+".bmp";
            img.Save(path, System.Drawing.Imaging.ImageFormat.Bmp);



           ViewData["Result"] = ("Image saved successfully to " + path);
        }
        else {
            ViewData["Result"] = "signature has not been returned successfully!";
        }


        ViewData["Result"] = sigObj.SigString;
        //return RedirectToAction("vrSignIn");
        return View();
    }

我的控制器中的其他地方也有代码,可以获取上传的文件并将其插入数据库。此代码工作正常。

 [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult UploadTempFiles(string id, string u)
    {
        //this method temporarily stores files 
        string userIdString = Cryptographer.DecryptSymmetric("RijndaelManaged", SecurityImpl.UrlToBase64(u));
        int userId = Convert.ToInt32(userIdString);

        if (Request.Files.Count > 0)
        {
            for (int i = 0; i < Request.Files.Count; i++)
            {
                HttpPostedFileBase file = Request.Files[i];
                int contentlength = file.ContentLength;
                byte[] b = new byte[contentlength];
                Stream s;
                s = file.InputStream;
                s.Read(b, 0, contentlength);
                VisitRequest.AddVisitorSignature(userId, b);
            }
        }

        return View("UploadFiles");
    }

我在想我可以使用第二个代码的某些部分来中断第一个代码中的图像创建过程,并将图像插入数据库而不是将图像保存到文件位置。我不知道该怎么做。

4

1 回答 1

0

我有同样的问题,我解决了:

  1. 评论这三行:

    //path = System.AppDomain.CurrentDomain.BaseDirectory;
    //path = path + "/uploadFiles/Signatures/"+thevrvIDstr+".bmp";
    //img.Save(path, System.Drawing.Imaging.ImageFormat.Bmp);
    
  2. 将图像转换为字符串数据(假设您的变量 'strSignature' 之前已声明):

    strSignature = img.ToString();
    
  3. 将其与您的存储过程一起保存。

希望这对你有帮助!

于 2012-07-19T15:03:53.960 回答