2

こんにちは、fineupload マルチ ファイル アップロード スクリプトを使用していますが、把握できないことがあります。PHPサーバー側のファイル処理スクリプトを作ろうとしています。

あなたが含めるとき

<script type="text/javascript">
$(document).ready(function() {
    var uploader = new qq.FileUploader({
        element: $('#manualUploadModeExample')[0],
        action: "core/up.php",
        autoUpload: false,
        demoMode: false,
        debug: false,
        multiple: true,
        maxConnections: 3,
        disableCancelForFormUploads: false,
        //0 is geen limit getal in bytes
        minSizeLimit: 0,
        sizeLimit: 0,
        inputName: "qqfile",
        uploadButtonText: "Select Files",
        cancelButtonText: "verwijder",
        failUploadText: "Upload mislukt"
    });

    $('#triggerUpload').click(function() {
        uploader.uploadStoredFiles();
    });
});

それを示すhtmlは

    <div id="Upload">
    <noscript>
        <p>Please enable JavaScript to use file uploader.</p>
        <!-- or put a simple form for upload here -->
    </noscript>
    <ul id="manualUploadModeExample" class="unstyled"></ul>
    <span id="triggerUpload" class="btn btn-primary">Upload Queued Files</span>
</div>

up.php、ファイルの検証などを行いたいのですが、ファイル情報を取得できません

コード

<?php
if(isset($_FILES["qqfile"])){
    echo json_encode(array('error' => "There is a file to work with"));
}
else
{
    echo json_encode(array('error' => "there is no file set"));
}
?>

アップロードフォームのエラーとして、ファイルが設定されていないというエラーが表示されます。だから、それはphpファイルからエラーを受け取ります...しかし、それは何を送信しますか? どうすれば見つけられますか

また、成功メッセージを送り返すとき

echo json_encode(array('success' => TRUE));

アップロードフォームには、ファイルがアップロードされ、緑色に変わると表示されます..

4

2 に答える 2

8

彼は、あなたがすでに解決策を見つけたかどうかはわかりませんが、おそらくこれを見ることができます:

最初の HTML フォーム

送信ボタンなしでボタンボタンだけの通常のhtmlフォームを作成するだけです。私のソリューションにも派手な読み込みバーがあることに注意してください!

<form enctype="multipart/form-data" id="myform">    
    <input type="text" name="some_usual_form_data" />
    <br>
    <input type="text" name="some_other_usual_form_data" />
    <br>
    <input type="file" multiple name="file[]" id="image" /> <sub>note that you have to use [] behind the name or php wil only see one file</sub>
    <br>
    <input type="button" value="Upload files" class="upload" />
</form>
<progress value="0" max="100"></progress>
<hr>
<div id="content_here_please"></div>

accept="image/*"またはその方法で何かを追加して、必要または必要なファイルタイプのみを選択できるようになりました。

次に、jquery/javascript を使用したアップロード

あなたのもののように見えますが、それよりも優れています。

$(document).ready(function () { 
    $('body').on('click', '.upload', function(){
        // Get the form data. This serializes the entire form. pritty easy huh!
        var form = new FormData($('#myform')[0]);

        // Make the ajax call
        $.ajax({
            url: 'action.php',
            type: 'POST',
            xhr: function() {
                var myXhr = $.ajaxSettings.xhr();
                if(myXhr.upload){
                    myXhr.upload.addEventListener('progress',progress, false);
                }
                return myXhr;
            },
            //add beforesend handler to validate or something
            //beforeSend: functionname,
            success: function (res) {
                $('#content_here_please').html(res);
            },
            //add error handler for when a error occurs if you want!
            //error: errorfunction,
            data: form,
            // this is the important stuf you need to overide the usual post behavior
            cache: false,
            contentType: false,
            processData: false
        });
    });
}); 

// Yes outside of the .ready space becouse this is a function not an event listner!
function progress(e){
    if(e.lengthComputable){
        //this makes a nice fancy progress bar
        $('progress').attr({value:e.loaded,max:e.total});
    }
}

私はこれを簡単に保ったと信じています。ただし、ここで JavaScript 関数を作成して、ファイルを検証したり、フォーム全体が必要な場合は検証したりできます。関数名を検証するだけでbeforeSend: youvalfunctname、 のようにそこにコールバックを作成することもできますbeforeSend: function(){ //do stuf here }。アップロード中にエラーが発生した場合は、 で同じことができますerror:

サーバー側のphp. やっと

あなたはここであなたがやりたいことをすることができますが、私はあなたがそれを行う方法の例を示しています.

<?php

    $succeed = 0;
    $error = 0;
    $thegoodstuf = '';
    foreach($_FILES["file"]["error"] as $key => $value) {
        if ($value == UPLOAD_ERR_OK){
            $succeed++;

            //took this from: "https://stackoverflow.com/questions/7563658/php-check-file-extension"
            //you can loop through different file types
            $file_parts = pathinfo($filename);
            switch($file_parts['extension'])
            {
                case "jpg":

                    //do something with jpg

                break;

                case "exe":

                    // do sometinhg with exe

                break;

                case "": // Handle file extension for files ending in '.'
                case NULL: // Handle no file extension
                break;
            }

            $name = $_FILES['file']['name'][$key];

            // replace file to where you want
            copy($_FILES['file']['tmp_name'][$key], './upload/'.$name);

            $size = filesize($_FILES['file']['tmp_name'][$key]);
            // make some nice html to send back
            $thegoodstuf .= "
                                <br>
                                <hr>
                                <br>

                                <h2>File $succeed - $name</h2>
                                <br>
                                    give some specs:
                                    <br>
                                    size: $size bytes
            ";
        }
        else{
            $error++;
        }
    }

    echo 'Good lord vader '.$succeed.' files where uploaded with success!<br>';

    if($error){
        echo 'shameful display! '.$error.' files where not properly uploaded!<br>';
    }

    echo '<br>O jeah there was a field containing some usual form data: '. $_REQUEST['some_usual_form_data'];
    echo '<br>O jeah there was a field containing some usual form data: '. $_REQUEST['some_other_usual_form_data'];

    echo $thegoodstuf;

?>

画像をアップロードするために特別に作成されたデモもご覧ください。常にオンラインであるとは限りません。

また、ここにデモのコード例があります

于 2013-06-13T08:06:20.743 に答える
0

以前はqqFileUploaderを使用していました。コードを確認したところ、ファイルにアクセスした方法は次のとおりです。を使用する必要があります$uploader ->file->getName()

$allowedExtensions = array('jpg','gif','png');
$sizeLimit = 2 * 1024 * 1024; //2mb
$uploader = new qqFileUploader($allowedExtensions, $sizeLimit);
$tmp = $uploader->file->getName(); // this is your $_FILES["qqfile"]
$result = $uploader->handleUpload('/path/where/to/upload/','filename.jpg');
if ($result['success']) {
    // successfully moved the file from temp location
} else {
    // not, error
}
于 2012-09-16T09:40:14.667 に答える