2014-06-24 210 views
0

我正在添加文件上傳功能到我的PHP頁面。代碼似乎對我來說是正確的,它甚至將文件以正確的名稱添加到服務器,但沒有內容。即加載圖像時有一個空的.jpg文件。php無法加載文件,似乎無法找到錯誤

你們誰可以更有經驗的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

爲什麼你在成功中做了一個location.reload()。那麼你可能只是定期提交表單而不使用ajax – KyleK

回答

0

因爲根據docs for it你不應該使用fopen("php://input", "r");

PHP://輸入不可用enctype =「multipart/form-data」。

當你上傳一個文件,當然,你必須使用enctype="multipart/form-data"。相反,使用move_uploaded_file

另外,您的其他分支中的fopen($_FILES['file']['name'], "r");沒有意義,因爲這只是試圖打開沒有特定路徑的文件名。使用move_uploaded_file。

+0

我有點困惑。我添加了「move_uploaded_file」,但我確信那不是你所談論的唯一的東西。 你能更具體一點嗎? – UserK

相關問題