Как удалить тип из строки Base64 Javascript FileReader?

24

У меня есть следующий код в моем Javascript:

var reader = new FileReader();
reader.onloadend = function () {
    alert(reader.result);
};

Это показывает мне следующие данные:

 data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAAAAABX3VL4AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3gYSDCUgSze0AAAAAA5JREFUCNdjrGJgYmAAAAJ0AH4SDHVIAAAAAElFTkSuQmCC

Дело в том, что мне нужна только часть после запятой. Я попытался получить его из reader.result.value , reader.result.valueOf() и некоторых других комбинаций, но не могу найти правильный, чтобы JUST получить строку base64, начиная с запятой. Итак, вторая идея - просто отключить запятую и все, что до этого, но я не уверен, как это сделать.

Кто-нибудь знает, как это сделать? Все советы приветствуются!

    
задан kramer65 18.06.2014 в 17:13
источник
  • var base64result = reader.result.split (',') [1]; или var base64result = reader.result.substr (reader.result.indexOf (',') + 1); –  Sani Singh Huttunen 18.06.2014 в 17:19

2 ответа

45

Следующие функции достигнут желаемого результата:

var base64result = reader.result.split(',')[1];

Это разделяет строку на массив строк с первым элементом (индекс 0), содержащим data:image/png;base64 , и вторым элементом (индекс 1), содержащим кодированные base64 данные.

Другое решение - найти индекс запятой, а затем просто отрезать все до запятой и включить ее:

var base64result = reader.result.substr(reader.result.indexOf(',') + 1);

См. JSFiddle .

    
ответ дан Sani Singh Huttunen 18.06.2014 в 17:23
источник
  • Мы точно знаем, что запятая никогда не встречается в строке base64? Если это так, очень хорошие решения. –  Max Mazur 25.10.2016 в 09:38
  • Да, мы точно знаем. Кодирование Base64 использует символы [a-z, A-Z, 0-9, +, /] для кодирования. = также используется для заполнения. См. Base64. –  Sani Singh Huttunen 25.10.2016 в 12:05
  • Отлично. Большое спасибо за ваше объяснение. –  Max Mazur 25.10.2016 в 13:09
  • Спасибо! Прежде чем читать этот ответ, я использовал это: var base64result = reader.result.match (/ ^ data:. + \ / (. +); Base64, (. *) $ /) [2], что является способом, путь медленнее. Я предполагаю, что сложность операций RegEx намного больше по сравнению с String.split –  sonlexqt 09.07.2017 в 17:19
12
let reader: FileReader = new FileReader();

 reader.onloadend = (e) => {
    let base64String = reader.result.split(',').pop();
 };

или

let base64String = /,(.+)/.exec(reader.result)[1];
    
ответ дан Oleh Leskiv 09.02.2017 в 09:56
источник