原生php+jquery.form.js異步上傳文件

html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <meta name="description" content=""/>
    <meta name="keywords" content=""/>
    <meta name="viewport" content="initial-scale=1, maximum-scale=3, minimum-scale=1, user-scalable=no">
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
    <link rel="stylesheet" href="/static/css/style.css">
</head>

<body>
    <div class="wrapper">
        <form action="/upload.php" enctype="multipart/form-data" method="post" id="form-import">
        <div class="item">
            <div class="outer">
                <div class="form-group group-top">
                    <div class="form-line">
                        <label for="">默認csv</label>
                        <input type="file" class="input" name="file" id="file">
                        <div class="btn" id="upload">上傳</div>
                        <span class="upload-info"></span>
                    </div>
                </div>
            </div>
        </div>
        </form>
    </div>
    <script src="/static/js/jquery.min.js"></script>
    <script src="/static/js/jquery.form.js"></script>
    <script>
        $(function() {
            var uploaded = false;
            var filename = '';
            $("#upload").click(function () {
                if(!uploaded) {
                    uploaded = true;
                    $('.upload-info').text('正在上傳,請稍候...');
                    $("#form-import").ajaxSubmit({
                        url: 'upload.php', /*設置post提交到的頁面*/
                        type: "post", /*設置表單以post方法提交*/
                        dataType: "json", /*設置返回值類型爲文本*/
                        success: function (ret) {
                            if(ret.status == 200) {
                                filename = ret.data;
                                $('.upload-info').text('上傳成功!');
                            }else{
                                $('.upload-info').text('上傳失敗!');
                                alert(ret.message);
                            }
                            uploaded = false;
                        },
                        error: function (error) { 
                            uploaded = false;
                            alert('服務器錯誤或網絡錯誤');
                            $('.upload-info').text('');
                        },
                      
                    });
                }
            });
        })
    </script>
</body>
</html>

upload.php

<?php
if(!isset($_FILES["file"])) {
    ajax_return('請選擇文件', 500);
}
// 允許上傳的後綴
$allowedExts = array("csv");
$temp = explode(".", $_FILES["file"]["name"]);

$extension = end($temp);     // 獲取文件後綴名
if (($_FILES["file"]["size"] < 1024*1024*20)   // 小於 20mb
&& in_array($extension, $allowedExts)) {
    if ($_FILES["file"]["error"] > 0) {
        $message =  "錯誤:: " . $_FILES["file"]["error"];
    }
    else {
        $filename = md5(uniqid(microtime())).'.'.$extension;
        // 判斷當期目錄下的 upload 目錄是否存在該文件
        if (file_exists("upload/" . $filename)) {
            $message =  $filename . " 文件已經存在。 ";
        }
        else {
            // 如果 upload 目錄不存在該文件則將文件上傳到 upload 目錄下
            $ret = move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $filename);
            if($ret) {
                $message = "文件存儲在: " . "upload/" . $filename;
                ajax_return($message, 200, $filename);
            }else{
                $message = "上傳失敗";
            }
        }
    }
}
else {
    $message = "非法的文件格式";
}
ajax_return($message, 500);

/* ajax接口返回
 *
 * @author fangdong
 * @param mixed  $data
 * @param boolean    $status
 * @param String $message
 */
function ajax_return($message, $status, $data = null)
{
    //ob_clean();
    $r = array(
        'message' => $message,
        'status'  => $status,
        'data'    => $data,
    );
    header('Content-Type:application/json;charset=utf-8');
    exit(json_encode($r));
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章