上传JSON文件错误

时间:2013-10-09 22:18:00

标签: php

我想将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.";
}

但我总是收到“无效文件”错误。为什么?

2 个答案:

答案 0 :(得分:1)

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

请阅读本文,了解如何使用jQuery上传文件,因为它并不像人们希望的那样简单。

How can I upload files asynchronously?

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

答案 1 :(得分:0)

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

祝你好运!