Skip to main content
 首页 » 编程设计

xmlhttprequest 本地文件

2024年11月24日16bluestorm

我有一个文件的路径,我想发送到服务器的休息网络服务。我正在使用 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://不起作用。如果我将我的文件放在客户端目录中并删除 file:///那么我至少可以看到 xmlhttprequest 打开并给出状态 200(我认为没问题!!)。我读到本地文件检查状态 == 0 而不是 readystatus == 4 所以我这样做了,但它仍然将数据变量提供为未定义,因此文件不会发送到服务器。最初,当我将表单操作作为我的休息 url 时,它上传得很好。由于我没有使用 html5,因此无法从 input type=file 元素中获取 File 对象。我想为此使用 xmlhttprequest 对象而不是直接使用表单元素。
请用任何建议或提示帮助我解决这个问题
卡维塔

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

请您参考如下方法:

从历史上看,您不能从 JavaScript 查询本地文件(或者不应该被允许,或者有些奇怪)。这将是严重的安全漏洞。

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

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

(您似乎遇到的另一个烦恼是,某些浏览器 - 至少是一些相对较旧的 FF 版本,例如 3.6.x - 当它们的请求根据其内部安全策略被阻止时,有时会返回一个正错误代码,例如 200 . 可能会很困惑一段时间......)。

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

  • Reading Files in JavaScript using the File API
  • Exploring the FileSystem APIs

  • 其他 SO 问题也提供了额外的提示:
  • Access local files from HTML5 Desktop Application in html folder
  • Solutions to allowing intranet/local file access in an HTML5 application?