Vas*_*yov 140 javascript base64
现在我通过这行获取File对象:
file = document.querySelector('#files > input[type="file"]').files[0]
Run Code Online (Sandbox Code Playgroud)
我需要通过基础64中的json发送此文件.我应该怎么做才能将它转换为base64字符串?
Dmi*_*tin 260
尝试使用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
Run Code Online (Sandbox Code Playgroud)
请注意,这.files[0]是一个File类型,它是一个sublcass Blob.因此它可以用于FileReader.
请参阅完整的工作示例.
jos*_*ing 115
如果您正在使用基于承诺的解决方案,这是@ 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)
);
Run Code Online (Sandbox Code Playgroud)
Arn*_*d P 32
建立Dmitri Pavlutin和joshua.paling答案,这是一个扩展版本,它提取base64内容(删除开头的元数据),并确保填充正确完成.
function getBase64(file) {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = () => {
let encoded = reader.result.toString().replace(/^data:(.*,)?/, '');
if ((encoded.length % 4) > 0) {
encoded += '='.repeat(4 - (encoded.length % 4));
}
resolve(encoded);
};
reader.onerror = error => reject(error);
});
}
Run Code Online (Sandbox Code Playgroud)
Дми*_*ьев 27
现代ES6方式(异步/等待)
const toBase64 = file => new Promise((resolve, reject) => {
const reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = () => resolve(reader.result);
reader.onerror = error => reject(error);
});
async function Main() {
const file = document.querySelector('#myfile').files[0];
console.log(await toBase64(file));
}
Main();
Run Code Online (Sandbox Code Playgroud)
UPD:
如果您想捕捉错误
async function Main() {
const file = document.querySelector('#myfile').files[0];
const result = await toBase64(file).catch(e => e);
if(result instanceof Error) {
console.log('Error: ', result.message);
return;
}
//...
}
Run Code Online (Sandbox Code Playgroud)
以下是我编写的几个函数,用于获取可以轻松传递的 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);
Run Code Online (Sandbox Code Playgroud)
const fileInput = document.querySelector('input');
fileInput.addEventListener('change', (e) => {
// get a reference to the file
const file = e.target.files[0];
// encode the file using the FileReader API
const reader = new FileReader();
reader.onloadend = () => {
// use a regex to remove data url part
const base64String = reader.result
.replace('data:', '')
.replace(/^.+,/, '');
// log to console
// logs wL2dvYWwgbW9yZ...
console.log(base64String);
};
reader.readAsDataURL(file);});
Run Code Online (Sandbox Code Playgroud)
打字稿版本
const file2Base64 = (file:File):Promise<string> => {
return new Promise<string> ((resolve,reject)=> {
const reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = () => resolve(reader.result.toString());
reader.onerror = error => reject(error);
})
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
236854 次 |
| 最近记录: |