它是读取和显示STL文件功能的一部分。如您所见,它接受用户使用文件输入上传的文件,并将其传递给使用openFile
API读取文件的FileReader。
window.addEventListener("load", function () {
...
...
// file load
var openFile = function (file) {
console.log(file);
var reader = new FileReader();
reader.addEventListener("load", function (ev) {
var buffer = ev.target.result;
var geom = loadStl(buffer);
scene.remove(obj);
obj = new THREE.Mesh(geom, mat);
scene.add(obj);
}, false);
reader.readAsArrayBuffer(file);
};
// file input button
var input = document.getElementById("file");
input.addEventListener("change", function (ev) {
var file = ev.target.files[0];
openFile(file);
}, false);
}, false);
但是,我想将文件传递给服务器上存在的openFile
。
我试过使用:
var file = new File ("myfile.stl");
openFile(file);
但不起作用。
发布于 2017-03-20 12:23:49
你想要的在概念上是错误的。
在您的用例中,所有文件读取行为都发生在本地机器(浏览器)中。如您所见,在寻址任何远程端点信息之前,FileReader
api加载本地文件并在缓冲区中表示它。
您想要的是在本地JavaScript代码中操作远程文件,而不需要任何网络设置!
要么首先加载远程文件,然后在本地使用FileReader
api,要么在服务器程序上执行文件操作,然后将结果返回给浏览器。
看一看文件API。
文件API的一个用例似乎与您的需求相似,但实际上是另一种情况。
发布于 2017-03-21 08:01:27
以下是解决办法:
window.addEventListener("load", function () {
...
...
var openFile = function(file) {
var xhr = new XMLHttpRequest();
xhr.open('GET', file, true);
xhr.responseType = 'arraybuffer';
xhr.onload = function(e) {
var buffer = this.response;
var geom = loadStl(buffer);
scene.remove(obj);
obj = new THREE.Mesh(geom, mat);
scene.add(obj);
};
xhr.send();
};
openFile('filename');
}, false);
https://stackoverflow.com/questions/42895913
复制相似问题