J'ai du mal à convertir l'image en tableau d'octets à l'aide du script côté client. Je dois convertir l'image en tableau d'octets et transmettre ce tableau au service Web, afin que les services Web puissent enregistrer l'image sur le serveur SQL. N'importe qui s'il vous plaît, aidez-moi.
j'ai trouvé une solution. :)
dans le fichier javascript html, convertissez d'abord l'image téléchargée au format d'image base64 en utilisant le code suivant.
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;
}
nous avons donc obtenu le code base64 de l'image téléchargée dans dataURL
.
ENVOYEZ MAINTENANT CE CODE BASE64 (dataURL
) au service Web et convertissez la chaîne base64 en tableau d'octets en utilisant le code suivant et enregistrez-le également sur le serveur SQL
code c # - pour convertir base64 en arte d'octets et pour stocker sur 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();
}
j'espère que tu comprends :) ......
File.prototype.convertToBase64 = function(callback){
var FR= new FileReader();
FR.onload = function(e) {
callback(e.target.result)
};
FR.readAsDataURL(this);
}
et appeler plus tard cette fonction en utilisant ce
var selectedFile = this.files[0];
selectedFile.convertToBase64(function(base64)
vous obtenez votre code base64.
Une solution possible à ce problème:
Vous pouvez évidemment faire une publication pleine page sur une URL spécifique pour effectuer la même fonctionnalité, mais je suis un grand fan des combinaisons de méthodes AJAX/web dans ASP.NET. Oh, cela suppose également vous utilisez ASP.NET pour publier dans la méthode Web.: P
Si vous ne voulez pas utiliser jQuery, vous pouvez implémenter votre propre fonction AJAX en utilisant l'objet XMLHttpRequest en JavaScript. Cet article a un bel exemple de mise en œuvre pour effectuer GET/POST appels vers une URL.