简单来说,我要从本地选择一个模型文件并且在页面加载它类似这样: load(fileUrl) 但是上传文件后,在 js 中获取到的是一个本地虚拟地址,传入这个地址的话是会被浏览器拒绝访问的,我搜了一整天,没有找到能用的解决方法。 有一个方法是将文件上传到服务器后返回其地址,但是模型文件大的话大小可能有几 M 到几十 M ,这样子的话效率比较低,想问问有没有什么方法可以实现本地调用文件?
1
Slienc7 2016-05-20 00:56:14 +08:00 via Android 1
|
2
rogerchen 2016-05-20 07:57:50 +08:00 1
<input id="fxxk" type=file></input>
监听一下 fxxk 的 change 事件,拿一下 ev.target.files, 送给楼上的 FileReader 就好 |
3
strggle OP 感谢楼上两位! 看了下 api ,尝试用了用 FileReader.result ,终于成功了!然后发现问题所在:
读取数据有三个方法,只有第一个才能生效,文档里说: the result attribute contains a data: URL representing the file's data. 大意就是返回一个 URL 代表这个文件 readAsDataURL(resultFile); readAsBinaryString(resultFile); readAsText(resultFile,'UTF-8'); 正常代码: var reader = new FileReader(); reader.readAsDataURL(resultFile); reader.onload = function (e) { load(reader.result); } |
4
YuJianrong 2016-05-20 10:50:59 +08:00
不知道为什么不行。
不过首先你为什么先读了再挂 onload 事件?不是应该反过来吗? |
5
strggle OP @YuJianrong 咦,你这么一说我才发现。这段代码是从网上教程找来修改后的 TAT ,不过实际运行还是可以跑,可能是文件比较大,还没加载完时就绑定好事件了。。。可能加载的文件小的话就会出 bug 了。。。 多谢提醒
|
6
dsphper 2016-05-20 14:00:23 +08:00
|
7
miniwade514 2016-05-20 15:42:23 +08:00
@YuJianrong 读文件是异步的,代码执行到 .onload 那里的时候,文件才刚开始读。.onload 只是监听 load 事件,要等文件读完了才会触发这个事件。
|
8
fhefh 2016-06-30 16:28:03 +08:00
mark~~
|