使用 XMLHttpRequest 在 JS 中写入文件

Write to file in JS using XMLHttpRequest?

本文关键字:文件 JS XMLHttpRequest 使用      更新时间:2023-09-26

我想出了如何使用XMLHttpRequest API将服务器上的本地.TXT文件读取到JS中,但是对于我的一生,我无法让它写入文件。 是否有可能或仅用于读取文件?

我的代码可以读入工作正常:

var fReader = new XMLHttpRequest();
fReader.onreadystatechange=function() {
  if(fReader.readyState==4 && fReader.status==200) {
    parseText(fReader.responseText);//Processes the file.
}}
fReader.open("GET",fFileLoc,true);
fReader.send();

我目前正在使用 PHP 写入文件,但它远非理想。 我真的很想让我们JS来做。 有什么想法吗? 有没有另一种方法可以做到这一点? PHP是唯一的方法吗?

提前感谢,

-戴夫

编辑:@rjmunro +其他:我发现使用PHP是解决这个问题的更好方法... 我修改后的代码如下。 (欢迎C&C)。

.JS:

var fReader = XMLHttpRequest();
//var params = "MODE=GET&File=Data.txt";//To read
//var params = "MODE=POST&File=Data.txt&Message=" + myMessage;//To write
    fReader.onreadystatechange=function() {
        if(fReader.readyState==4 && fReader.status==200) {
            //Not really any response text if writing...
            parseText(JSON.parse(fReader.responseText).GET);
        }
    }
    fReader.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    fReader.setRequestHeader("Content-length", params.length);
    fReader.setRequestHeader("Connection", "close");
    fReader.send(params);

.PHP

$MODE = $_POST['MODE'];
switch($MODE) {
    case('GET'):
      #Read in file and process, then return output.
      $return['GET'] = file($_POST['File']);
    break;
    case('POST'):
        if(file_exists($_POST['File'])){
            $file = fopen($_POST['File'],"a");
            $data = $_POST["Message"];
            fwrite($file,$data);
            fclose($file);
        }
    #$return['POST'] = "some message?";
    break;
}
echo json_encode($return);

我唯一不是 100% 使用这个解决方案的是为什么我必须设置请求标头?Chrome实际上似乎不喜欢这样... 我从另一个帖子中提取了代码。

XMLHttpRequest 允许您发出 HTTP 请求。

如果要使用它写入文件,则 HTTP 服务器必须通过写入文件来响应请求。

您可以使用 PUT 谓词来执行此操作(请注意,您必须配置 HTTP 服务器以允许这样做,默认情况下,没有 HTTP 服务器允许任意用户将文件写入服务器的磁盘)。

您还可以使用 POST 或其他请求类型传递数据。

PHP是唯一的方法吗?

你可以在服务器上使用任何你喜欢的编程语言(取决于服务器支持的内容,例如,如果你想使用C#,那么你几乎肯定想要一个带有IIS和 ASP.NET 的Windows服务器)。如果你想使用JavaScript,那么有很多选择,其中Node.js比目前的其他选项更受欢迎。

你可以配置apache接受PUT请求,然后使用XMLHttpRequest发送一个请求(我会用jQuery.ajax()来抽象它)。

不过,最好让PHP(或其他服务器端语言)为您处理它,因为仅使用Apache很难控制身份验证。