php无法加载文件,似乎无法找到错误

时间:2014-06-24 22:15:32

标签: php file-upload

我正在向我的php页面添加文件上传功能。代码对我来说似乎是正确的,它甚至将文件添加到具有正确名称的服务器,但没有内容。即加载图像时有一个空的.jpg文件。

你们中任何一位经验丰富的php开发人员都可以看到我做错了产生空文件。

调用脚本:

<script>
        $(document).ready(function(){
            $("#mediaFileInput").on("change", function(e){
                console
                if (e.target.value) {
                    var formData = new FormData(e.target.form);
                    $.ajax({
                        url: 'media.php',  //Server script to process data
                        type: 'POST',
                        success: function(data){
                            location.reload();
                        },
                        // Form data
                        data: formData,
                        //Options to tell jQuery not to process data or worry about content-type.
                        cache: false,
                        contentType: false,
                        processData: false
                    });   
                }
            });
        });           
    </script>

忽略原始

<?php
   require('config/config.php');

    $file_uploaded;
    $mime_type;

    // Handle multipart file uploads
    if (isset ( $_FILES ['file'] )) {
        $file_uploaded = fopen($_FILES['file']['name'], "r");
        $mime_type = $_FILES['file']['type'];
    } else if ($_SERVER["REQUEST_METHOD"] == "POST") {
        /* PUT data comes in on the stdin stream */
        $file_uploaded = fopen("php://input", "r");

        /* Open a file for writing */
        $mime_type = $_SERVER["CONTENT_TYPE"];
    }

    $file_name = $_FILES['file']['name'];
    $new_path = "media/" . $file_name;
    $media_url = "/" . $new_path;
    $fp = fopen($new_path, "w");

    /* Read the data 1 KB at a time
       and write to the file */
    while ($data = fread($file_uploaded, 1024)) {
    fwrite($fp, $data);
    }

    /* Close the streams */
    fclose($fp);
    fclose($file_uploaded);
    chmod($new_path, 0755);

    // insert into database.
    $stmt = $db_conn->prepare("INSERT INTO MEDIA (type, url) VALUES(?, ?)");
    $stmt->bind_param('ss', 
       $mime_type, 
        $media_url);
    $stmt->execute();
    $media_id = $db_conn->insert_id;
    $stmt->close();

    echo json_encode(array("id" => $media_id, "type" => $mime_type, "url" => $media_url));


    ?>

1 个答案:

答案 0 :(得分:0)

您不应该使用fopen("php://input", "r");,因为根据docs for it

  

php://输入不适用于enctype =&#34; multipart / form-data&#34;。

当您上传文件时,您必须使用enctype="multipart/form-data"。因此,请使用move_uploaded_file

此外,您的其他分支中的fopen($_FILES['file']['name'], "r");没有意义,因为它只是尝试打开没有特定路径的文件名。使用move_uploaded_file。