クライアント側のスクリプトを使用して画像をバイト配列に変換するのに苦労しています。 WebサービスがSQLサーバーにイメージを保存できるように、イメージをバイト配列に変換し、この配列をWebサービスに渡す必要があります。誰でも助けてください。
私は1つの解決策を見つけました。 :)
html javascriptファイルで、最初に次のコードを使用してアップロードされた画像をbase64画像形式に変換します。
var p;
var canvas = document.createElement("canvas");
var img1=document.createElement("img");
function getBase64Image(){
p=document.getElementById("fileUpload").value;
img1.setAttribute('src', p);
canvas.width = img1.width;
canvas.height = img1.height;
var ctx = canvas.getContext("2d");
ctx.drawImage(img1, 0, 0);
var dataURL = canvas.toDataURL("image/png");
alert("from getbase64 function"+dataURL );
return dataURL;
}
dataURL
にアップロードされた画像のbase64コードを取得しました。
このBASE64コード(dataURL
)をWebサービスに送信し、次のコードを使用してbase64文字列をバイト配列に変換し、SQLサーバーにも保存します
c#コード-base64をバイトarryに変換し、SQLに保存するため
private void Form1_Load(object sender, EventArgs e) {
int userid = 5;
string base64="";// load base 64 code to this variable from js
Byte[] bitmapData = new Byte[base64.Length];
bitmapData = Convert.FromBase64String(FixBase64ForImage(base64));
string connstr = @"user id=sa; password=*****";
database=ImageTest;
server="192.168.1.104";
SqlConnection conn = new SqlConnection(connstr);
conn.Open();
string query;
query = "insert into imagetable(userid,image) values(" + userid + "," + " @pic)";
SqlParameter picparameter = new SqlParameter();
picparameter.SqlDbType = SqlDbType.Image;
picparameter.ParameterName = "pic";
picparameter.Value = bitmapData;
SqlCommand cmd = new SqlCommand(query, conn);
cmd.Parameters.Add(picparameter);
cmd.ExecuteNonQuery();
cmd.Dispose();
conn.Close();
conn.Dispose();
}
public static string FixBase64ForImage(string image) {
StringBuilder sbText = new StringBuilder(image, image.Length);
sbText.Replace("\r\n", String.Empty);
sbText.Replace(" ", String.Empty);
return sbText.ToString();
}
理解してほしい:) ......
File.prototype.convertToBase64 = function(callback){
var FR= new FileReader();
FR.onload = function(e) {
callback(e.target.result)
};
FR.readAsDataURL(this);
}
後でこれを使用してこの関数を呼び出します
var selectedFile = this.files[0];
selectedFile.convertToBase64(function(base64)
base64コードを取得します。
この問題の可能な解決策:
同じ機能を実行するために特定のURLにページ全体を投稿することは明らかにできますが、私はAJAX/ASP.NETでのWebメソッドの組み合わせの大ファンです。 ASP.NETを使用してWebメソッドに投稿します。
JQueryを使用したくない場合は、JavaScriptのXMLHttpRequestオブジェクトを使用して、独自のAJAX関数を実装できます。 この記事 の実装方法の例がありますGET/POST URLへの呼び出しを実行します。