Как преобразовать изображение в массив байтов, используя javascript только для хранения изображения на сервере sql?

Я пытаюсь преобразовать изображение в байтовый массив с помощью клиентской стороны script. Мне нужно преобразовать образ в массив байтов и передать этот массив в веб-службу, чтобы веб-службы могли сохранять изображение на сервере sql. Любой, пожалуйста, помогите мне.

Ответы

Ответ 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;
} 

поэтому мы получили код загруженного изображения base64 в dataURL.

СЕЙЧАС ОТПРАВИТЬ ЭТОТ BASE64 CODE (dataURL) в веб-службу и преобразовать строку base64 в байтовый массив, используя следующий код и сохранить на сервере sql.

С# code - для преобразования 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();
}

надеюсь, поймите:)......

Ответ 2

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.

Ответ 3

Возможное решение этой проблемы:

  • Выполните вызов faux-AJAX для загрузки файла изображения (this. Плагин jQuery для меня до сих пор твои чудеса.
  • Извлеките файл со страницы, на которую вы отправили ее, через Request.Files.
  • Выполните вызов веб-метода с помощью полученного свойства HttpPostedFile InputStream для подачи байта [] параметра вызова Web Method.

Очевидно, вы можете сделать полностраничное сообщение для определенного URL-адреса для выполнения той же функции, но я большой поклонник комбинаций AJAX/веб-методов в ASP.NET. О, это также предполагает, что вы используете ASP.NET для публикации в веб-методе.: P

Если вы не хотите использовать jQuery, вы можете реализовать свою собственную функцию AJAX, используя объект XMLHttpRequest в JavaScript. В этой статье есть хороший пример того, как реализовать его для выполнения вызовов GET/POST на URL.