Я использую этот синтаксис
Map<Integer, List<Choice>> choiceMap =
choices.stream().collect(Collectors.groupingBy(choice -> choice.getName()));
Попробуйте решение, используя класс 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
. См. Полный рабочий пример .
Если вы после решения, основанного на обещании, это код @ 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)
);
Функция JavaScript btoa () может использоваться для преобразования данных в кодированную в base64 строку
Вот несколько функций, которые я написал, чтобы получить файл в формате 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);
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