使用javascript以字符串形式获取文件

使用javascript以字符串形式获取文件,javascript,html,xml,file,Javascript,Html,Xml,File,我有一个HTML表单来上传文件 我的目标是提交表单,检查文件是否具有XML扩展名,并将文件作为字符串放入JavaScript变量中 然后,我想使用这个字符串向服务器发送POST请求 你知道我怎么做吗 我的目标是提交表单,检查文件是否具有XML扩展名,并将文件作为字符串放入JavaScript变量中 我认为你不是真的想在这个阶段提交表单(比如,发送到服务器) 然后,我想使用这个字符串向服务器发送POST请求 您可以在支持但不支持IE8或IE9的浏览器上执行此操作。有一个例子 基本上,您可以从元素的

我有一个HTML表单来上传文件

我的目标是提交表单,检查文件是否具有XML扩展名,并将文件作为字符串放入JavaScript变量中

然后,我想使用这个字符串向服务器发送POST请求

你知道我怎么做吗

我的目标是提交表单,检查文件是否具有XML扩展名,并将文件作为字符串放入JavaScript变量中

我认为你不是真的想在这个阶段提交表单(比如,发送到服务器)

然后,我想使用这个字符串向服务器发送POST请求

您可以在支持但不支持IE8或IE9的浏览器上执行此操作。有一个例子

基本上,您可以从
元素的
文件列表中获取
文件
实例,检查其名称,读取它,然后发布它:

()(除了POST位,我想你知道怎么做):


例子
去
(功能(){
“严格使用”;
//获取输入元素和按钮;在本例中
//每一个都只有一个,你当然会缩小这些选择器的范围
var inputElement=document.querySelector(“输入[type=file]”),
按钮=document.querySelector(“按钮”);
if(文件读取器的类型!=“函数”){
警报(“此浏览器不支持该文件API。”);
inputElement.style.display=button.style.display=“无”;
返回;
}
如果(!inputElement.files){
警报(“奇怪,此浏览器在输入元素上有FileReader,但没有`files`属性。”);
inputElement.style.display=button.style.display=“无”;
返回;
}
addEventListener(“单击”,函数(){
var文件、文件名、读卡器、文件数据;
//有档案吗?
if(inputElement.files.length==0){
警报(“未选择文件”);
返回;
}
//获取它的第一个文件
file=inputElement.files[0];
//以小写形式获取其名称
filename=file.name.toLowerCase();
//XML扩展?
if(filename.substr(-4)!=“.xml”){
警报(“请仅选择.xml文件”);
}
否则{
//是的,读一下
reader=newfilereader();
reader.onload=函数(){
//获取文件数据,注意这是异步发生的
filedata=reader.result;
//将数据发送到您的帖子;在这里,我们将把它转储出去
//作为文本
显示XML(文件数据);
};
reader.readAsText(文件);//或者您可以使用readAsBinaryString
}
},假);
函数displayXml(xmlText){
var pre=document.createElement('pre');

pre.innerHTML=xmlText.replace(/&/g,“&;”).replace(/@Dalorzo:是的,您可以()。但我认为OP并不是真的想这么做。@user:您说过您正在“提交”表单,你想把表单的数据放入一个JavaScript变量。你在服务器上使用JavaScript吗?为了澄清,你想上传一个文件到服务器,从服务器将文件中的数据发送到客户端,然后从客户端将数据发送回服务器?我不确定你的主要目标是什么,但我认为你的方法可能已关闭。@用户:请不要询问并运行。在发布后至少停留几分钟,回答人们的后续问题。
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Example</title>
</head>
<body>
  <input type="file">
  <button>Go</button>
<script>
  (function() {
    "use strict";

    // Get our input element and our button; in this example there's
    // just one of each, you'd narrow down these selectors of course
    var inputElement = document.querySelector("input[type=file]"),
        button = document.querySelector("button");

    if (typeof FileReader !== 'function') {
      alert("The file API isn't supported on this browser.");
      inputElement.style.display = button.style.display = "none";
      return;
    }
    if (!inputElement.files) {
      alert("Odd, this browser has FileReader but no `files` property on the input element.");
      inputElement.style.display = button.style.display = "none";
      return;
    }

    button.addEventListener("click", function() {
      var file, filename, reader, filedata;

      // Does it have any files?
      if (inputElement.files.length === 0) {
        alert("No file chosen");
        return;
      }

      // Get its first file
      file = inputElement.files[0];

      // Get its name in lower case
      filename = file.name.toLowerCase();

      // XML extension?
      if (filename.substr(-4) !== ".xml") {
        alert("Please only choose .xml files");
      }
      else {
        // Yes, read it
        reader = new FileReader();
        reader.onload = function() {
          // Get the file data, note that this happens asynchronously
          filedata = reader.result;
          // Send your POST with the data; here, we'll just dump it out
          // as text
          displayXml(filedata);
        };
        reader.readAsText(file); // or you can use readAsBinaryString
      }
    }, false);

    function displayXml(xmlText) {
      var pre = document.createElement('pre');
      pre.innerHTML = xmlText.replace(/&/g, "&amp;").replace(/</g, "&lt;");
      document.body.appendChild(pre);
    }
  })();
</script>
</body>
</html>