javascript - 如何将大文本文件下载/上传到客户端应用程序
问题描述
我试图下载 .obj 文件,我从顶点的二进制数组生成客户端。问题是有太多顶点无法放入浏览器窗口内存
exportOBJ() {
var output = 'o object_export\n';
var i, j, k, l, x, y, z;
var vertices = this._vertices.array;
for (i = 0; i < vertices.length; i += 3) {
x = vertices[i];
y = vertices[i + 1];
z = vertices[i + 2];
output += 'v ' + x + ' ' + y + ' ' + z + '\n';
}
//Other data...
}
//保存方法
function (data) {
var blob = new Blob([data], { type: 'text/obj;charset=utf-8;' });
if (navigator.msSaveBlob) { // IE 10+
navigator.msSaveBlob(blob, filename);
} else {
var link = document.createElement("a");
if (link.download !== undefined) { // feature detection
// Browsers that support HTML5 download attribute
var url = URL.createObjectURL(blob);
link.setAttribute("href", url);
link.setAttribute("download", 'export.obj');
link.style.visibility = 'hidden';
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
}
})
所以这适用于小的顶点文件,但是当有很多顶点时,比如 10M,浏览器窗口会崩溃。我研究过使用文件流,但据我所知,这不是客户端。https://github.com/jimmywarting/StreamSaver.js也是如此 ,我也需要能够上传。
解决方案
在您的问题中提到的 github 项目中,有人提到当您的网站在 https 上运行时,它可以在客户端运行。仅当您的网站不是 https 时,它才使用中间人策略。
所以,只要你的网站是 https 的,你就可以使用 service worker 拦截 URL fetch 请求,并下载内容。
顺便说一句,您提到的项目非常有用。谢谢。
推荐阅读
- javascript - 如何将 `value` 道具和 `v-model` 道具分配给自定义 Vue 组件?
- .net - 在 .NET 中,查找从 OBJ 文件中读取的数组部分的开始和结束索引
- javascript - Discord.js 帮助命令编译命令列表并嵌入缩略图
- azure - NullPointerException 从 azure app 服务下载 pdf 文件,Spring-boot Java 8
- javascript - 使用反应钩子搜索数组对象
- javascript - 制作带有过渡的动画菜单?
- jquery - 在引导模式中加载内容
- java - StreamTokenizer 如何在行尾既是 CR 又是 LF 或组合的情况下工作?
- c++ - 为什么指针返回字符串而不是第一个字符,因为指针仅存储第一个字符的地址?
- jenkins - 有没有使用 API 复制 Jenkins Job 和 Builds 的方法?