推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
strggle

js 如何使用选择上传的本地文件?

  •  
  •   strggle · May 20, 2016 · 4512 views
    This topic created in 3671 days ago, the information mentioned may be changed or developed.

    简单来说,我要从本地选择一个模型文件并且在页面加载它类似这样: load(fileUrl) 但是上传文件后,在 js 中获取到的是一个本地虚拟地址,传入这个地址的话是会被浏览器拒绝访问的,我搜了一整天,没有找到能用的解决方法。 有一个方法是将文件上传到服务器后返回其地址,但是模型文件大的话大小可能有几 M 到几十 M ,这样子的话效率比较低,想问问有没有什么方法可以实现本地调用文件?

    8 replies    2016-06-30 16:28:03 +08:00
    Slienc7
        1
    Slienc7  
       May 20, 2016 via Android   ❤️ 1
    rogerchen
        2
    rogerchen  
       May 20, 2016   ❤️ 1
    <input id="fxxk" type=file></input>
    监听一下 fxxk 的 change 事件,拿一下 ev.target.files, 送给楼上的 FileReader 就好
    strggle
        3
    strggle  
    OP
       May 20, 2016
    感谢楼上两位! 看了下 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);
    }
    YuJianrong
        4
    YuJianrong  
       May 20, 2016
    不知道为什么不行。
    不过首先你为什么先读了再挂 onload 事件?不是应该反过来吗?
    strggle
        5
    strggle  
    OP
       May 20, 2016
    @YuJianrong 咦,你这么一说我才发现。这段代码是从网上教程找来修改后的 TAT ,不过实际运行还是可以跑,可能是文件比较大,还没加载完时就绑定好事件了。。。可能加载的文件小的话就会出 bug 了。。。 多谢提醒
    dsphper
        6
    dsphper  
       May 20, 2016
    miniwade514
        7
    miniwade514  
       May 20, 2016
    @YuJianrong 读文件是异步的,代码执行到 .onload 那里的时候,文件才刚开始读。.onload 只是监听 load 事件,要等文件读完了才会触发这个事件。
    fhefh
        8
    fhefh  
       Jun 30, 2016
    mark~~
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5393 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 45ms · UTC 07:27 · PVG 15:27 · LAX 00:27 · JFK 03:27
    ♥ Do have faith in what you're doing.