Получить изображение base64 из входного файла [duplicate]

Я использую этот синтаксис

Map<Integer, List<Choice>> choiceMap = 
choices.stream().collect(Collectors.groupingBy(choice -> choice.getName()));
68
задан Insane Skull 29 March 2016 в 10:40
поделиться

4 ответа

Попробуйте решение, используя класс FileReader :

function getBase64(file) {
   var reader = new FileReader();
   reader.readAsDataURL(file);
   reader.onload = function () {
     console.log(reader.result);
   };
   reader.onerror = function (error) {
     console.log('Error: ', error);
   };
}

var file = document.querySelector('#files > input[type="file"]').files[0];
getBase64(file); // prints the base64 string

Обратите внимание, что .files[0] - это тип File, который является подкассой Blob , Таким образом, его можно использовать с FileReader. См. Полный рабочий пример .

159
ответ дан Dmitri Pavlutin 22 August 2018 в 21:30
поделиться
  • 1
    Узнайте больше о FileReader API: developer.mozilla.org/en-US/docs/Web/API/FileReader и поддержка браузера: caniuse.com/#feat=filereader – Lukas 9 June 2017 в 19:16
  • 2
    Я попытался использовать return reader.result из функции getBase64() (вместо использования console.log(reader.result)), потому что я хочу захватить base64 как переменную (а затем отправить ее в Google Apps Script). Я вызвал функцию с помощью: var my_file_as_base64 = getBase64(file), а затем попытался напечатать на консоли с помощью console.log(my_file_as_base64 ) и только что получил undefined. Как правильно назначить base64 переменной? – user1063287 9 November 2017 в 06:35
  • 3
    Я ответил на вопрос, если кто-нибудь может ответить. [Д0] stackoverflow.com/questions/47195119/… – user1063287 10 November 2017 в 06:21
  • 4
    Мне нужно открыть этот файл Base64 в браузере с тем же именем файла, я открываю его с помощью window.open (url, '_blank'), который работает нормально, как я могу назвать это имя файла? пожалуйста помоги. – Munish Sharma 26 April 2018 в 08:14

Если вы после решения, основанного на обещании, это код @ Dmitri, адаптированный для этого:

function getBase64(file) {
  return new Promise((resolve, reject) => {
    const reader = new FileReader();
    reader.readAsDataURL(file);
    reader.onload = () => resolve(reader.result);
    reader.onerror = error => reject(error);
  });
}

var file = document.querySelector('#files > input[type="file"]').files[0];
getBase64(file).then(
  data => console.log(data)
);
39
ответ дан Chong Lip Phang 22 August 2018 в 21:30
поделиться
  • 1
    Мне нужно открыть этот файл Base64 в браузере с тем же именем файла, я открываю его с помощью window.open (url, '_blank'), который работает нормально, как я могу назвать это имя файла? пожалуйста помоги. – Munish Sharma 26 April 2018 в 08:16
  • 2
    Это должен быть главный ответ. – ethancrist 16 May 2018 в 06:31

Функция JavaScript btoa () может использоваться для преобразования данных в кодированную в base64 строку

6
ответ дан Pranav Maniar 22 August 2018 в 21:30
поделиться

Вот несколько функций, которые я написал, чтобы получить файл в формате json, который можно легко передать:

    //takes an array of JavaScript File objects
    function getFiles(files) {
        return Promise.all(files.map(file => getFile(file)));
    }

    //take a single JavaScript File object
    function getFile(file) {
        var reader = new FileReader();
        return new Promise((resolve, reject) => {
            reader.onerror = () => { reader.abort(); reject(new Error("Error parsing file"));}
            reader.onload = function () {

                //This will result in an array that will be recognized by C#.NET WebApi as a byte[]
                let bytes = Array.from(new Uint8Array(this.result));

                //if you want the base64encoded file you would use the below line:
                let base64StringFile = btoa(bytes.map((item) => String.fromCharCode(item)).join(""));

                //Resolve the promise with your custom file structure
                resolve({ 
                    bytes: bytes,
                    base64StringFile: base64StringFile,
                    fileName: file.name, 
                    fileType: file.type
                });
            }
            reader.readAsArrayBuffer(file);
        });
    }

    //using the functions with your file:

    file = document.querySelector('#files > input[type="file"]').files[0]
    getFile(file).then((customJsonFile) => {
         //customJsonFile is your newly constructed file.
         console.log(customJsonFile);
    });

    //if you are in an environment where async/await is supported

    files = document.querySelector('#files > input[type="file"]').files
    let customJsonFiles = await getFiles(files);
    //customJsonFiles is an array of your custom files
    console.log(customJsonFiles);
0
ответ дан tkd_aj 22 August 2018 в 21:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: