【问题标题】:What to use instead of FileReader for Safari?用什么代替 Safari 的 FileReader?
【发布时间】:2011-12-05 18:09:33
【问题描述】:

(我是网络编程的新手,因此对缺乏基本知识表示歉意。)

我的页面允许用户选择一个文件,然后在客户端读取该文件并显示在页面上的文本框中。我发现最简单的方法是使用 FileReader 对象,该对象在 Firefox 和 Chrome 中运行良好。

这在 Safari 中(还)不起作用,那么我应该怎么做呢?

//When the eventlistener detects a change in the input file...
var file = evt.target.files[0]
var reader = new FileReader();
reader.onload = function (e){document.getElementById('data').value = e.target.result};
reader.readAsText(file);

相关说明:

  • 我正在使用 Windows 版 Safari
  • 现在页面和要读取的文件一样是本地的。在我使用标志 --allow-file-access-from-files 之前,Chrome 一直存在问题

【问题讨论】:

    标签: javascript safari filereader


    【解决方案1】:

    可悲的是,我能想出的唯一答案会占用一些额外的带宽。

    首先,使用if (typeof FileReader !== "undefined"Modernizr 之类的东西来遵循支持FileReader 的浏览器的正常流程。否则,通过 AJAX 将文件 POST 到某个回显内容的服务器端脚本。

    因此,对于兼容的浏览器,您可以为自己节省一些带宽,而对于不兼容的浏览器,您必须为团队购买一个。

    【讨论】:

    • 也许这会满足您的需求:github.com/dcneiner/Downloadify
    • 谢谢!感觉很傻,但我只是不知道其他可能性是什么(猜猜当你还是新手时会发生这种情况!)
    • 我真的很喜欢你的回答,似乎是处理这种情况的一种响应方式。谢谢。
    • @Quickredfox 兄弟我有同样的问题,我已经理解了第一部分并且它工作得很好,但是 ajax 部分让我感到困惑我需要在 ajax 中发送整个输入文件吗?请详细解释以下是我的代码函数 showimagepreview(input) { if(input.files && input.files[0]) { if (window.FileReader){ var fr=new FileReader(); fr.onload=function(e) { $("#image").attr('src',e.target.result); $("#storedProfileImage").attr('value',e.target.result); } fr.readAsDataURL(input.files[0]); } 其他{ 警报();控制台.log(输入.文件); }} }
    【解决方案2】:

    另一种解决方案是使用“A FileReader polyfill for Internet Explorer and Safari using Flash”

    见:https://github.com/Jahdrien/FileReader

    【讨论】:

      猜你喜欢
      • 2011-07-31
      • 1970-01-01
      • 1970-01-01
      • 2014-09-27
      • 2014-09-24
      • 2011-09-18
      • 2011-06-30
      • 2011-10-22
      • 2015-09-19
      相关资源
      最近更新 更多