Преобразование локального изображения в base64 с помощью JavaScript

Я делаю проект в html, только javascript. У меня есть функция, которая конвертирует изображение в base64, см. код ниже.

function getBase64Image()
{
    p = document.getElementById("picField").value;
    img.setAttribute('src', p);
    var canvas = document.createElement("canvas");
    canvas.width = img.width;
    canvas.height = img.height;
    var ctx = canvas.getContext("2d");
    ctx.drawImage(img, 0, 0);
    var dataURL = canvas.toDataURL("image/png");
    var r = dataURL.replace(/^data:image\/(png|jpg);base64,/, "");
    base64 = r;
    alert(base64);
}

но проблема в том, что когда я развернул свой веб-сайт, значит, когда я разместил свой html-файл на iis, он не работает, значит, в локальной файловой системе он показывает полный формат base 64, например iVb...., но на iis он дает код base64 как просто "база". так почему это не работает на iis, я не знаю, поэтому, пожалуйста, помогите мне и пришлите мне html-файл, который будет работать и на iis.


person Raja Ramesh    schedule 05.03.2012    source источник
comment
Это код на стороне клиента и не должен иметь ничего общего с IIS. Вероятно, у вас проблема с политикой одинакового происхождения. Что это за поле document.getElementById("picField") и как выглядит URL-адрес, который в нем содержится?   -  person Pekka    schedule 05.03.2012
comment
Конечно, тот же html-файл четко показывает строку base64, но при размещении на iis он не отображается, почему?   -  person Raja Ramesh    schedule 05.03.2012
comment
‹тип ввода=идентификатор файла=picField onchange=f() ›   -  person Raja Ramesh    schedule 05.03.2012
comment
Боюсь, это не сработает. Я удивлен, что это работает локально. Какой браузер вы используете?   -  person Pekka    schedule 05.03.2012
comment
возможный дубликат javascript base64, не работающий на iis, в некоторых браузерах тоже, почему?   -  person rene    schedule 09.08.2012


Ответы (1)


Я почти уверен, что у вас проблема с Same Origin Policy.

Когда вы запускаете свою страницу в IIS, она запускается в другом контексте, чем локально: вместо URL-адреса file:// она запускается с http://.

То, что вы пытаетесь сделать, это получить локальный файл изображения и загрузить его на холст на удаленном сайте. Это невозможно с использованием традиционного JavaScript по соображениям безопасности. (Я не уверен, как это работает даже локально — в моем понимании, не должно. Но тем не менее.)

Вам потребуется использовать API файлов HTML 5, который обеспечивает прямой доступ JavaScript к локальным файлам. Я посмотрю, смогу ли я выкопать некоторые связанные вопросы SO.

Обновление: это должно помочь:

person Pekka    schedule 05.03.2012
comment
КАК МОЖНО РЕШИТЬ НАШУ ПРОБЛЕМУ? ПОЖАЛУЙСТА, ПОМОГИТЕ МНЕ - person Raja Ramesh; 05.03.2012
comment
@Raja смотрите ссылку в ответе. Здесь вам нужно использовать немного другую концепцию. - person Pekka; 05.03.2012
comment
извините, я не могу, и это для Mozilla, не работает в IE - person Raja Ramesh; 06.03.2012
comment
@Raja, да, это пока не работает в IE. Может быть, в IE10... Вам придется обслуживать одну версию в IE, а другую в Firefox/Chrome. У меня нет практического опыта в этом, поэтому я больше не могу помочь, у меня нет времени, чтобы попробовать это прямо сейчас - person Pekka; 06.03.2012