上传 JSON 文件错误


Upload JSON file error

我想将JSON和txt文件加载到大小为200KB的服务器。

这是我正在使用的脚本:

$allowedExts = array("json", "txt");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);
if ((($_FILES["file"]["type"] == "application/json")
        || ($_FILES["file"]["type"] == "text/txt"))
    && ($_FILES["file"]["size"] < 200000)
    && in_array($extension, $allowedExts)
) {
    if ($_FILES["file"]["error"] > 0) {
        echo "Código do erro: " . $_FILES["file"]["error"] . "<br>";
    } else {
        echo "Upload: " . $_FILES["file"]["name"] . "<br>";
        echo "Type: " . $_FILES["file"]["type"] . "<br>";
        echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
        echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>";
        move_uploaded_file($_FILES["file"]["tmp_name"],
            "upload" . $_FILES["file"]["name"]);
        echo "Gravado em: " . $diretorio . $_FILES["file"]["name"];
    }
} else {
    echo "Invalid file.";
}

但是我总是收到"无效文件"错误。这是为什么呢?

您实际上从未提交过表单。 当您更改字段upload的值时,您的 javascript 只是在浏览器窗口中加载一个新页面(上传.php(。

请阅读这篇关于如何使用jQuery上传文件的文章,因为它并不像人们希望的那么简单。

如何异步上传文件?

或者,如果您的目的是实际重定向到这个新页面(而不是上传文件而不在浏览器中重新加载页面(,那么您可以简单地为文件上传执行传统的非 AJAX 表单,如此处@OlafErlandsen答案中所述。

在你的

HTML表单中使用enctype

<form method="post" action="" enctype="multipart/form-data">
    <input type="file" name="file" />
    <input type="submit" value="Upload" />
</form>

并使用此内容类型(以避免出现问题(:

$types = array('application/json','application/x-javascript','text/javascript','text/x-javascript','text/x-json');
if( in_array( $_FILES['file']['type'] , $types ) )

而且,如果你使用 jQuery:

var formData = new FormData($('form')[0]);
$.ajax({
    url: 'file.php',
    type: 'POST',
    success: function ( response ){ console.log( "ok" ); },
    data: formData,
    cache: false,
    contentType: false,
    enctype: 'multipart/form-data',
    processData: false
});

并且,尝试使用此类上传:

https://github.com/erlandsen/upload

祝你好运!