ウェブカメラから画像をキャプチャし、それをSQL Serverデータベースにシリアル化したいJavascriptを作成しました。データベースのフィールドは通常のvarbinary(max)です。ASP.Net jQuery webcam image to database varbinary(max)
「『797719006-』の挿入に失敗しました::Telerik.OpenAccess.RT.sql.SQLExceptionを私は生の画像は私のWebメソッドに渡されるが、それは次のエラーを投げ続けること放火犯から見ることができます。テーブル 'GoldStar.Students.Pictures';
画像をキャプチャするjavascriptはうまくいきますので、問題はありません。保存するだけですおそらく、私はajax経由でウェブメソッドを使って更新することで、複雑すぎるのでしょうか?
登録ページでウェブ対応のメソッドを作成しました。
[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)
}
});
}
デバッガを使用してサーバー側のコードを歩いていますか?オフハンドでは、Objectからbyte []へのキャストが失敗しているようです。 – RickNZ
ええ、それはちょうどそれが失敗している場所です。それは問題です、私はどのようにjavascriptのHtmlImageElementまたは生のイメージデータ(currentPic.src)をbyte []にシリアル化してdbの記憶域をシリアル化するかわからないようです。私はグーグルではありますが、まだ関連するものは見つけていません。私がbyte []にしている安全なキャストは、暗闇の中でちょうど刺さったものであり、私が思ったように多くを壊していました。 – coderpros