我正在努力使用客户端脚本将图像转换为字节数组。我必须将图像转换为字节数组,并将此数组传递给Web服务,以便Web服务可以将图像保存在sql server中。任何人请帮助我。
答案 0 :(得分:15)
我找到了一个解决方案。 :)
在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 server
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();
}
希望你明白:) ......
答案 1 :(得分:5)
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代码。
答案 2 :(得分:2)
此问题的可能解决方案:
显然,您可以对特定URL执行完整页面发布以执行相同的功能,但我非常喜欢ASP.NET中的AJAX / Web方法组合。哦,这也假设您使用ASP.NET发布到Web方法。 :P
如果您不想使用jQuery,可以使用JavaScript中的XMLHttpRequest对象实现自己的AJAX函数。 This article有一个很好的例子,说明如何实现它来对网址执行GET / POST调用。