【问题标题】:read file from local storage using js使用js从本地存储读取文件
【发布时间】:2014-11-08 15:17:32
【问题描述】:

嗨,我正在使用 java 脚本从我的电脑中读取 txt 文件。 我尝试通过 3 种方式来做到这一点:

function readTextFile(file) {
            var rawFile = new XMLHttpRequest();
            rawFile.open("GET", file, false);
            rawFile.onreadystatechange = function() {
                if (rawFile.readyState === 4) {
                    if (rawFile.status === 200 || rawFile.status == 0) {
                        var allText = rawFile.responseText;
                        console.log(allText);
                    }
                }
            }
            rawFile.send(null);
        }
        console.log("1");
        readTextFile("text.txt"); //GOOD
        console.log("2");
        readTextFile("D:/Documents/Documents/Aptana Studio 3 Workspace/Yonit_web_services/test/text.txt"); //BAD
        console.log("3");
        readTextFile("file:///D:/Documents/Documents/Aptana Studio 3 Workspace/Yonit_web_services/test/text.txt"); //BAD

它们都指向同一个文件 我遇到了这样的错误:

XMLHttpRequest 无法加载 file:///D:/Documents/Documents/Aptana%20Studio%203%20Workspace/Yonit_web_services/test/text.txt。仅 HTTP 支持跨源请求。 test.html:21readTextFile test.html:21(匿名函数) test.html:26

这是为什么?谢谢。

【问题讨论】:

  • 出于安全考虑,JavaScript 无法访问本地文件系统。
  • XMLHttpRequest 对跨域有一些限制。话虽这么说,就你这样做的方式而言,D:/file:///D:/ 使文件看起来可以在源之外访问。
  • 您需要使用 在 javascript 中读取本地文件。您选择文件,然后运行 ​​URL.createObjectURL(inpFile.files[0]);要获得一个 url,您可以按编码提供给您的 readTextFile() 函数。您不能在输入中硬编码路径,出于安全原因,用户必须选择文件。

标签: javascript


【解决方案1】:

不久前我遇到了同样的问题。我通过使用此参数的 Windows 命令提示符打开 Chrome 来修复它:--disable-web-security

请注意,这存在安全漏洞。

【讨论】:

    【解决方案2】:

    由于安全原因,浏览器不允许通过javascript访问文件,请找到下面的链接。

    Security

    但在 HTML5 中,可以通过使用文件上传/下载,链接 File Uplaod/Download

    【讨论】:

      【解决方案3】:

      第一种读取文件的方法:

      readTextFile("text.txt"); //GOOD

      之所以有效,是因为"text.txt" 是一个相对路径,与您拥有文件系统的情况相同:

      \index.html
      \img\img.png
      

      在这方面,index.html 可以访问 img.png,您可以通过使用相对路径来访问 parent 和 parrent 的父目录中的文件和文件夹。

      在 Windows 命令提示符下,您可以使用 dir 测试这些相对路径,如下所示:

      REM Dir will show contents of current directory
      Dir
      REM Dir .. will show contents of parent directory
      Dir ..
      REM Dir ../.. will show contents of parent's parent directory
      Dir ../..
      

      相同的路径处理应该在 JavaScript 中工作

      话虽如此,对d:/file://D:/ 的限制很可能是出于安全原因。您可能想查看http://en.wikipedia.org/wiki/Samba_%28software%29 了解更多详情。

      【讨论】:

        【解决方案4】:

        你总是可以做一件事,那就是把它放在你的应用程序访问它的某个 url 上(仅当它不包含任何安全信息时)。

        【讨论】:

          猜你喜欢
          • 2021-01-10
          • 1970-01-01
          • 1970-01-01
          • 2022-12-02
          • 2021-07-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-08-19
          相关资源
          最近更新 更多