将任意格式的文件用BASE64编码后嵌入到单文件静态网页里面,浏览器打开

将任意格式的文件用BASE64编码后嵌入到单文件静态网页里面,浏览器打开会以下载链接的形式体现,用户点击链接后会弹出下载对话框下载这个文件,请提供符合以上要求的一个HTML的例子

如果不用后台,图片的话可以用canvas.toDataURL方法获得图片的base64字符串(取得的其实是图片的目前的显示数据流而不是源文件数据,故不涉及同源策略问题)。
但如果是任意文件,貌似无解,这里涉及同源策略问题,即一个(不受控)的网站,通过前端页面,通过js读取本地(非同源)任意文件,得到这个文件的内容。也就是说,你的要求其实可以看作,用任意网站,可以在未授权的情况下,读取你操作系统关键的配置文件,想想也是很不安全的事件对吧。这个功能应该需要浏览器插件授权支持。

============================================
不过我在网站上找到这个代码,以本地打开的方式运行是可以实现你要的功能的。
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="description" content="在线Base64生成转换小工具,可以实现任意文件转Base64 Data-URI编码,文件往页面中一拖即可。" />
<meta name="keywords" content="base64, FileReader, readAsDataURL, 文件" />
<meta name="author" content="谢勇彬,XYB" />
<title>任意文件转base64-直接拖进来</title>
<style>
body { word-break: break-all; margin: 0 1em; min-height: 100vh; font-family: Consolas, "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", Monaco, "Courier New", monospace; overflow: hidden;}
.empty::before{position: absolute; font-size: 50px; content: '任意文件\A拖到这里'; white-space: pre; left: 50%; top: 50%; transform: translate(-50%,-50%); color: gray;}
</style>
</head>
<body class="empty">
<script>
window.addEventListener("dragenter", function(event) { event.preventDefault(); }, false);
window.addEventListener("dragover", function(event) { event.preventDefault(); }, false);
window.addEventListener("drop", function(event) {
var reader = new FileReader();
reader.onload = function(e) {
document.body.insertAdjacentHTML("afterBegin", '<p>' + e.target.result + '</p>');
document.body.classList.remove('empty');
};
reader.readAsDataURL(event.dataTransfer.files[0]);
event.preventDefault();
}, false);
</script>

</body>
</html>
温馨提示:答案为网友推荐,仅供参考
相似回答