本地文件的xmlhttprequest
我有一个文件的path,我想发送到其余的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; } }
文件://不起作用。 如果我把我的文件在客户端目录中,并删除文件:/ / /那么我至less可以看到xmlhttprequest打开并给予状态200(我认为好吧!!)。 我读本地文件检查状态== 0,而不是readystatus == 4所以我这样做,但它仍然给数据variables未定义,所以文件不去服务器。 最初,当我把表单行为作为我的resturl时,它正在上传。 由于我没有使用html5我无法从inputtype = file元素中获取File对象。 我想直接使用xmlhttprequest对象而不是表单元素。 请帮助我与任何build议或提示KAvita这个问题
即使我使用表单提交上传如何使用Web服务的返回值。 这就是我需要使用xmlhttpRequest的原因。 如果有人可以build议如何使用行动的回报价值将是伟大的! 卡维塔
从历史上看,你不能从JavaScript查询本地文件(或不应该被允许,或者奇怪)。 这将是一个严重的安全漏洞。
只有less数情况下,你可以做到这一点,但总的来说,它们涉及到需要为浏览器设置的特定安全设置,以解除限制或通知当前页面的执行过程,即授予此特殊权利。 例如,通过编辑属性可以在Firefox中实现。 在开发浏览器扩展(如Chrome或FF)时,如果请求文件访问权限,通常也可以。
另一种解决此限制的方法是托pipe本地Web服务器,并声明其上的虚拟主机能够执行这种AJAX请求来获取本地文件。 networking开发者使用这个技巧(更像一个标准,真的)从本地开发的好处,同时复制生产系统是相当普遍的。 你可以使用像Jetty这样的轻量级Web服务器。
(另一个意思是你似乎遇到的麻烦是某些浏览器 – 至less是一些相对较老的FF版本,比如3.6.x),当它们的请求根据其内部安全策略被阻塞时,有时会返回一个正确的错误代码,如200可能会很困惑一会儿…)。
最后,较新的HTML5 API提供了一些新的构造来访问本地文件。 考虑阅读:
- 使用File API在JavaScript中读取文件
- 探索FileSystem API
其他SO问题也提供了额外的指示:
- 从HTML5桌面应用程序访问html文件夹中的本地文件
- 在HTML5应用程序中允许Intranet /本地文件访问的解决scheme?
我使用一个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; }
我发现一个简单的解决scheme 你必须在你的本地URL“file:/// ..”后面添加“?application / xhtml + xml”。