xmlhttprequest用于本地文件

时间:2011-10-07 06:05:20

标签: xmlhttprequest

我有一个文件的路径,我想发送到服务器的其他Web服务。我正在使用xmlhttprequest对象。这篇文章如下:

var url = "http://localhost:8080/RestWSGS/jersey/gridsense";
 var boundary = "--------------" + (new Date).getTime();
  xmlHttp.open('POST', url, true);
  xmlHttp.onreadystatechange = function ()
  {
      if (this.readyState != 4)
        return;

      var result =this.responseText;
    document.write(result);
    };
  xmlHttp.setRequestHeader('Content-Type', 'multipart/form-data; boundary=' + boundary);

var  part ="";
 part += 'Content-Disposition: form-data; ';
  part += 'name="' + document.getElementById("filename").name + '" ; ';
  //alert(document.getElementById("filename").value);
  part += 'filename="'+ document.getElementById("filename").value +  '";\r\n';

  part += "Content-Type: application/xml";
  part += "\r\n\r\n"; // marks end of the headers part
  part += 'filename="'+ document.getElementById("filename").value +  '";\r\n';
  part+= data;
   var request = "--" + boundary + "\r\n";
  request+= part /* + "--" + boundary + "\r\n" */;
  request+= "--" + boundary + "--" + "\r\n";
  alert(request); 
  xmlHttp.send(request);  

我要发送的数据位于客户端本地磁盘上。我想为它使用get方法:

var str = document.getElementById("filename").value;


    var data;
    var xmlhttp1 = getNewHTTPObject();
    xmlhttp1.open("GET", 
    "file:///New Folder/" +document.getElementById("filename").value , false);

    xmlhttp1.send(null);
    alert('hi' + xmlhttp1.status);
    xmlhttp1.onreadystatechange = function()    {
        if (this.status == 0)
        {
            alert("resp " + this.responseText);
            data = this.responseText;
        }
    }

file://不起作用。如果我将我的文件放在客户端目录中并删除文件:///然后我至少可以看到xmlhttprequest打开并给出状态200(我认为确定!!)。我读到本地文件检查状态== 0而不是readystatus == 4所以我这样做但它仍然提供数据变量未定义,因此该文件不会转到服务器。最初,当我将表单操作作为我的其他URL时,它正在上传很好。由于我没有使用html5,因此无法从input type = file元素中获取File对象。我想直接使用xmlhttprequest对象而不是表单元素。  如有任何建议或提示,请帮我解决这个问题 KAvita


即使我使用表单提交进行上传,我如何使用Web服务的返回值。这就是我需要使用xmlhttpRequest的原因。如果有人可以建议如何使用动作的返回值,那就太棒了! 卡维塔

3 个答案:

答案 0 :(得分:22)

从历史上看,您无法从JavaScript查询本地文件(或者不应该被允许,或者某些东西是奇怪的)。这将严重违反安全规定。

只有少数情况可以执行此操作,但通常它们涉及需要为浏览器设置的特定安全设置,以解除限制或通知当前页面的执行过程已授予此权限特殊权利。例如,这可以通过编辑属性在Firefox中实现。如果他们请求文件访问权限,那么在开发浏览器扩展(例如Chrome或FF)时通常也可以。

解决此限制的另一种方法是托管本地Web服务器,并在其上声明虚拟主机以便能够执行此类AJAX请求以获取本地文件。对于Web开发人员来说,采用这种技巧(更像是标准,真的)来获得本地开发的好处但同时复制生产系统是很常见的。例如,您可以使用像Jetty这样的轻量级Web服务器。

(你似乎遇到的另一个卑鄙的烦恼是,某些浏览器 - 至少是一些相对较旧的FF版本,如3.6.x--有时会在请求被阻止时返回正面错误代码,如200根据他们的内部安全政策。暂时可能会让人感到困惑......)。

最后,较新的HTML5 API确实提供了一些新的构造来访问本地文件。考虑阅读:

其他SO问题也提供了额外的指示:

答案 1 :(得分:4)

我使用的是iframe。

<div class="item" onclick="page(event)">HTML5</div>

<iframe id="page" src="">
function page(e) {
    trigger = e.currentTarget.innerHTML;
    docname = new String(trigger + ".txt");
    document.getElementById("page").src = docname;
}

答案 2 :(得分:-4)

我找到了一个简单的解决方案。 你必须添加&#34;?application / xhtml + xml&#34;在您的本地网址后面&#34; file:///.."。