मैं फ़ाइल को अपलोड फ़ोल्डर में संग्रहीत करके और डेटाबेस में नाम सहेजकर एक साधारण पीडीएफ/एक्सेल फ़ाइल अपलोड करने का प्रयास कर रहा हूं। यहाँ समस्या यह है कि मेरे द्वारा अपलोड बटन पर क्लिक करने के बाद, डेटाबेस मेरे $transaction->test = "something"; को सहेजता है, लेकिन फ़ाइल या निर्देशिका को नहीं।

<input type="file" id="upload" name="upload" accept="application/pdf,application/vnd.ms-excel" />
<input id="next" class="btn btn-primary" type="button" value="Upload" />

<script>
uploadFile : function (upload) {
           $.ajax({
                type: 'POST',
                url: 'upload.php',
                data: { 
                upload: $('#upload').val(),
                },
               success: function(data)
                {
                    if(data.result == true){
                        alert("File has been uploaded successfully");
                    }   
                    else{
                    alert("Fail to upload file");
                    }       
                },
            });
                return false;
}
</script>

अपलोड.php

public function uploadFile($params){
    extract($params);
    $response = $this->response;
    $agentId = $this->getCurrentId();
    
    $agent    = Investor::fetch($agentId); //fetching user info
    if(count($POST)>0){
        $d=(object)$POST;
        $transaction = new Transaction (); //create new data
        $transaction->test = "something"; //this works
        $target_dir = "../uploads/";
        $target_file = $target_dir . basename($_FILES["upload"]["name"]);
        $fileUpload = move_uploaded_file($_FILES['upload']['tmp_name'], $target_file);       
         if($fileUpload){
             $transaction ->description = $fileUpload;
             $transaction->save ();
             $this->success();
             $this->response['result'] = true;       
         }
         else{
            $this->response['result'] = false;
         }
        }
    return $this->response;
 }
0
lowyat2017 19 जून 2017, 13:35

2 जवाब

आप जिस jQuery AJAX का उपयोग कर रहे हैं वह फ़ाइल अपलोड नहीं करेगा। आपको इसमें FormData और append फाइल बनानी है जैसे:

$('#upload').on('click', function() {
        var file_data = $('#pic').prop('files')[0];
        var form_data = new FormData();
        form_data.append('file', file_data);

        $.ajax({
                url         : 'upload.php',     // point to server-side PHP script 
                dataType    : 'text',           // what to expect back from the PHP script, if anything
                cache       : false,
                contentType : false,
                processData : false,
                data        : form_data,                         
                type        : 'post',
                success     : function(output){
                    alert(output);              // display response from the PHP script, if any
                }
         });
         $('#pic').val('');                     /* Clear the file container */
    });

अपलोड.php:

if ( $_FILES['file']['error'] > 0 ){
        echo 'Error: ' . $_FILES['file']['error'] . '<br>';
    }
    else {
        if(move_uploaded_file($_FILES['file']['tmp_name'], 'uploads/' . $_FILES['file']['name']))
        {
            echo "File Uploaded Successfully";
        }
    }
2
Mayank Pandeyz 19 जून 2017, 13:37
क्या मैं पूछ सकता हूं कि $('#pic').prop('files')[0] क्या करता है और मैं #pic मान कैसे प्राप्त करूं?
 – 
lowyat2017
19 जून 2017, 13:43
यहां $('#pic') इनपुट टाइप इमेज की आईडी है और पूरी लाइन File { name="450726.png", lastModified=1489048084000, lastModifiedDate=Date, more...} फाइल ऑब्जेक्ट लौटाती है
 – 
Mayank Pandeyz
19 जून 2017, 13:48
<!DOCTYPE html>
<html>
<head>
    <title>Image Upload Form</title>
    <script src="//code.jquery.com/jquery-1.9.1.js"></script>
    <script type="text/javascript">
        function submitForm() {
            console.log("submit event");
            var fd = new FormData(document.getElementById("fileinfo"));
            fd.append("label", "WEBUPLOAD");
            $.ajax({
              url: "upload.php",
              type: "POST",
              data: fd,
              processData: false,  // tell jQuery not to process the data
              contentType: false   // tell jQuery not to set contentType
            }).done(function( data ) {
                console.log("PHP Output:");
                console.log( data );
            });
            return false;
        }
    </script>
</head>

<body>
    <form method="post" id="fileinfo" name="fileinfo" onsubmit="return submitForm();">
        <label>Select a file:</label><br>
        <input type="file" name="file" required />
        <input type="submit" value="Upload" />
    </form>
    <div id="output"></div>
</body>
</html>

//upload.php
<?php
if ($_POST["label"]) {
    $label = $_POST["label"];
}
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 200000)
&& in_array($extension, $allowedExts)) {
    if ($_FILES["file"]["error"] > 0) {
        echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
    } else {
        $filename = $label.$_FILES["file"]["name"];
        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>";

        if (file_exists("uploads/" . $filename)) {
            echo $filename . " already exists. ";
        } else {
            move_uploaded_file($_FILES["file"]["tmp_name"],
            "uploads/" . $filename);
            echo "Stored in: " . "uploads/" . $filename;
        }
    }
} else {
    echo "Invalid file";
}
?>
0
user1752065 19 जून 2017, 13:43