【问题标题】:How to send only the text from a text file如何仅发送文本文件中的文本
【发布时间】:2014-02-24 05:58:39
【问题描述】:

我需要做的是:

  • 让用户从他的光盘中选择txt文件

  • 从中获取文本,假设是一个变量

  • 通过 AJAX 发送(变量值)

首先我想知道我是否应该使用普通输入类型(比如我想通过 POST 发送文件)<input type="file">

对于第二点,我需要知道如何获取所选文件用户的名称,然后从中读取文本。另外我不擅长 javascript,所以我真的不知道字符串可以存在多长时间(文件平均大约有 15k 行)

对于第三个,我不需要知道是否可以将数据存储在变量或数组中。

提前致谢。

附:我猜 javascript 不是一种快速的语言,但是(取决于编辑器)它有时会在我的计算机上以我在前 5 或 6 行中拥有所有需要的数据的方式打开。是否可以从文件中只读取前几行?

【问题讨论】:

  • HTML5 Rocks 有一个从磁盘读取文件的教程 (html5rocks.com/en/tutorials/file/dndfiles)。
  • re: ps: 当然,只需将“file.slice(0, 1024)”调用传递给 FileReader() 而不是“file”来获取文件的第一个 KB,而无需读取整个文件东西到 RAM 中。
  • 另外,file.name,来自您提供给 FileReader() 的同一个文件,具有文件名...

标签: javascript jquery html ajax


【解决方案1】:

@dandavis 和其他评论者已经提到(并链接),可以使用 File API 获得您想要的东西,但是关于该解决方案有一些事情需要考虑,即browser support。底线是文件 API 目前是 w3c 的working draft。最重要的是,即使是 w3c 推荐,所有浏览器并不总是完全支持这些东西。

什么解决方案对您来说“最好”归结为您想要支持的浏览器/版本。如果这是我自己的个人项目或“现代”网站/观众,我会使用 File API。但如果这是需要最大浏览器支持的东西(对于旧浏览器),我目前不建议使用 File API。

说了这么多,这里有一个不涉及使用 FIle API 的建议解决方案。

  • 以表格形式提供输入类型文件供用户指定文件。用户必须选择文件(javascript 不能这样做)
  • 使用form.submit() 或设置target 属性来提交表单。有一个iframe trick 用于在不刷新页面的情况下提交表单。
  • 使用选择的服务器端语言来响应文件信息(名称、内容等)。例如,在 php 中,您可以使用 $_FILES 访问发布的文件
  • 那么您可以使用javascript 来解析响应。通常,您会将其作为 json 编码响应发送。然后你可以用javascript中的文件信息做任何你想做的事情。

【讨论】:

  • 我认为您的第一点并非 100% 正确。 (html5rocks.com/en/tutorials/file/dndfiles)
  • 我必须在 javascript 中访问该文件才能通过 $.post 发送它,不是吗?
  • 有趣的是你说你必须使用 ajax 但 JS 无法将文件内容作为字符串传递给 ajax...
  • html5 规范可以访问它,是的。但是,用户必须指定一个文件,js不能在没有用户交互的情况下在用户的计算机上查找文件。 2、在html5规范之外,js无权访问文件内容。
  • @Fiodor 可以在不刷新页面的情况下提交文件,即使使用 ajax(使用文件 api),具体取决于您的浏览器支持需求。还有一个iframe 技巧可以提供更多浏览器支持。 stackoverflow.com/questions/2320069/jquery-ajax-file-upload 了解更多详情。哪种解决方案(包括文件 api 解决方案)对您来说“最好”归结为您想要支持的浏览器/版本。
【解决方案2】:

使用 Chrome 和 Firefox,您可以像这样读取文本文件的内容:

HTML:

<input type="file" id="in-file" />    

带有 jQ​​uery 的 JavaScript:

var fileInput = $('#in-file');

fileInput.change(function(e) {
    var reader = new FileReader();
    reader.onload = function(e) {
        console.log(reader.result);
    }
    reader.readAsText(fileInput[0].files[0]);   
});

IE 不支持 FileReader 对象。

【讨论】:

    猜你喜欢
    • 2019-05-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-11
    • 2017-10-28
    • 2014-07-03
    • 1970-01-01
    • 1970-01-01
    • 2012-09-28
    相关资源
    最近更新 更多