php - 通过AJAX上传文件

标签 php javascript jquery ajax file-upload

我希望能够使用 AJAX 上传文件。

我尝试过使用(JavaScript):

   $("input[type='file']").change(function(){
        var file = document.getElementById("uploadelement").files[0];
        $.ajax({
            url: "upload.php",
            type: "POST",
            beforeSend: function(xhr){
                xhr.setRequestHeader("X_FILENAME", file.name); 
            },
            success: function(data){
                console.log(data);
            }
        });
    });

使用(PHP):

<?php

    $fn = (isset($_SERVER['HTTP_X_FILENAME']) ? $_SERVER['HTTP_X_FILENAME'] : false);
    if ($fn) {
        // AJAX call
        file_put_contents(
            'uploads/' . $fn,
            file_get_contents('php://input')
        );
        echo "$fn uploaded";
        exit();
    }

?>

但是,我遇到了问题,文件内容未显示。我不确定出了什么问题。我在 tutorial 上找到了这段代码所以我认为它应该可以工作。

文件已上传到文件夹,但没有内容。

最佳答案

我不知道 jQuery $.ajax() 调用,但这可以通过使用 XMLHttpRequest 来实现,如下所示:

var file = document.getElementById("uploadelement").files[0];
var form_data = new FormData();
form_data.append("userfile", file);

var xmlhttp = new XMLHttpRequest();
xmlhttp.open("POST", "upload.php");
xmlhttp.send(form_data);

然后在您的 PHP 上传处理程序中(此处为 upload.php):

move_uploaded_file($_FILES["userfile"]["tmp_name"], "path/to/uploads/" . $_FILES["userfile"]["name"]);

然后文件应该已经保存到所需的目录中。

关于php - 通过AJAX上传文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16049685/

相关文章:

php - 重写时的数据库查询

php - 通过 ajax 运行 php 脚本,但前提是该脚本尚未运行

php - Laravel - 从数据库查询并保存到另一个

javascript - Jqgrid在使用编辑规则时保持关注当前单元格

javascript - jQuery 检查 CSS 颜色值不工作

javascript - 在 jquery 的父级中间添加 html

javascript - 如何垂直对齐 float 的、流动的 div 中的内容?

javascript - 轮询 api 直到响应成功

javascript - 如何从公共(public)文件覆盖 JavaScript 函数?

php - CodeIgniter 重命名电子邮件附件文件