0

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

しかし、常に「無効なファイル」エラーが発生します。それはなぜです?

4

2 に答える 2

1

実際にフォームを送信することはありません。uploadフィールドの値を変更すると、javascript はブラウザー ウィンドウ (upload.php) に新しいページをロードするだけです。

jQuery を使用してファイルをアップロードする方法については、この記事をお読みください。期待するほど簡単ではありません。

ファイルを非同期でアップロードするにはどうすればよいですか?

または、ブラウザでページをリロードせずにファイルをアップロードするのではなく、実際にこの新しいページにリダイレクトすることを意図している場合は、回答で概説されているように、ファイルのアップロードに従来の非 AJAX フォームを単純に実行できます。 @OlafErlandsenはこちら。

于 2013-10-09T22:32:11.180 に答える
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

幸運を!

于 2013-10-09T22:31:54.007 に答える