【问题标题】:Get selected file's content before submitting upload form在提交上传表单之前获取所选文件的内容
【发布时间】:2014-11-05 16:12:44
【问题描述】:

当我要求用户上传.patch 文件以及少量文本输入时,我有一个表单。

我能否在用户提交表单之前获取该文件的内容或更具体的几行(补丁的更改文件)并在可能禁用的文本框中将其显示给用户?

【问题讨论】:

  • 我不知道它是否适用于 .patch 文件,但你可以试试这个..github.com/bgrins/filereader.js
  • 你为什么要标记这个问题 [PHP] ?您是否必须将文件发送到服务器才能获得所需的行?我认为用 Javascript 做会更容易
  • @anestv 我的堆栈是 PHP,因此。

标签: php jquery forms patch


【解决方案1】:

您可以做的是读取 .patch 文件并使用 RegEx 解析它以获取其中的文件名。

.patch 文件是一个文本文件,格式如下:

--- src.orig/java/org/apache/nutch/analysis/NutchAnalysisConstants.java 
+++ src/java/org/apache/nutch/analysis/NutchAnalysisConstants.java  

所以每个“---”表示一个文件名,因此您可以读取所选文件的内容并使用正则表达式获取文件名并将它们添加到您的输入中:

$("#fileInput").on("change", function(){ //When a new file is selected
    var file = $("#fileInput").prop("files")[0]; //get the file

   if (file.name.indexOf(".patch") < 0) {
      alert("You can only select .patch files");
      $("#fileInput").val("");
   }
   else {
       var reader = new FileReader(); 
       reader.readAsText(file, "UTF-8");
       reader.onload = function (evt) {  //When file is loaded.
           $("#text").html("");

           var fileContent = evt.target.result; //event.target.result is the file content
           var names = fileContent.match(/--- .*?\s/g); //Use regex to get lines starting with --- ending with \s

           $(names).each(function(i,e){
                $("#text").html($("#text").html() + e + "\n"); //Add each line to the disabled textarea
                $("#text").attr("rows", ++i); //sets height of textarea to the no. of lines
           });
       }
   }
});

【讨论】:

  • 正是我想要的。由于我们已经在读取文件...我们可以在 onchange 中添加验证以让用户只选择 .patch 文件
  • 如果您在从输入中获取console.log(file); 后使用它,您会看到它有一个name 属性。您可以检查file.name 是否以.patch 结尾。 HTML5 在输入上也有一个accept 属性,但目前它的支持有限且不一致。但是根据您希望应用程序的安全级别和用户类型,他们可以获得可执行文件并将其重命名为.patch,您的客户端将通过验证,但会导致服务器端出现问题。所以最好也验证服务器上的文件类型。
  • 我在 php 中的服务器端进行了验证...只是想在输入中添加一个额外的内容。
  • 是的,好的,就像我说的那样有&lt;input type="file" accept=".patch",但不适用于所有浏览器。如果您也有服务器端验证,则添加accept,检查file.name 的文件扩展名,应该没问题。在文件更改时,您可以检查if (file.name.indexOf(".patch") &lt; 0) { alert('Use .patch file only');}
  • 对我的答案进行了编辑以添加换行符,这是我的初始代码,但我测试的文件已经有换行符,所以我删除了它们。无论如何。
猜你喜欢
  • 2013-06-22
  • 2021-12-19
  • 1970-01-01
  • 1970-01-01
  • 2016-12-01
  • 1970-01-01
  • 2013-05-17
  • 2013-08-10
  • 2013-05-29
相关资源
最近更新 更多