1 回答

TA贡献1831条经验 获得超9个赞
您应该使用数组缓冲区作为中介
<html>
<head></head>
<body>
<input type="file"/>Please input a "png" image for test<br>
<img src=""/>
<hr>
<button state="working">Working</button>
<button state="notworking">now works</button>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
$.FileToArrayBuffer = (File, callback) => {
const reader = new FileReader();
reader.onload = async () => {
callback(await reader.result);
}
reader.readAsArrayBuffer(File)
}
$.ArrayBufferToString = (ArrayBuffer, callback)=>{
btoa(new Uint8Array(blob).reduce(async (data,byte)=>{
callback(await (data + String.fromCharCode(byte)));
}));
}
$.StringToArrayBuffer = (String)=>{
var enc = TextEncoder();
return enc.encode(String);
}
$.ArrayBufferToFile = (ArrayBuffer)=>{
return new Blob([ArrayBuffer])
}
$.FileToUrl = (File,callback)=>{
const reader = new FileReader();
reader.onload = async ()=>{
callback(await reader.result);
}
reader.readAsDataURL(File);
}
</script>
<script>
$("button[state='notworking']").on("click",()=>{
$.FileToArrayBuffer($("input[type='file']")[0].files[0],(arraybuffer)=>{
$.FileToUrl($.ArrayBufferToFile(arraybuffer,"image/png"),(a)=>($("img")[0].src = a))
})
})
$("button[state='working']").on("click",()=>{
$.FileToUrl($("input[type='file']")[0].files[0],a=>($("img")[0].src = a))
})
</script>
</body>
</html>
添加回答
举报