首頁 >php框架 >ThinkPHP >如何實作ThinkPHP6中的檔案上傳功能

如何實作ThinkPHP6中的檔案上傳功能

WBOY
WBOY原創
2023-06-20 08:35:133838瀏覽

隨著網路的不斷發展,越來越多的網站需要實現檔案上傳功能。在ThinkPHP6中,實作檔案上傳功能也變得非常簡單。今天我們就來介紹如何在ThinkPHP6中實作檔案上傳功能。

一、設定檔上傳參數

在開始實作檔案上傳功能之前,首先需要在ThinkPHP6的設定檔中設定檔上傳的參數。找到專案的設定檔config/app.php,然後在params數組中加入以下程式碼:

'upload' => [
    'maxSize' => 1024 * 1024 * 10, //文件上传的最大大小
    'exts' => ['jpg', 'gif', 'png', 'jpeg'], //允许上传的文件后缀
    'rootPath' => app()->getRootPath() . 'public/uploads/', //文件上传的根目录
    'savePath' => '', //文件保存的子目录
    'subName' => ['date', 'Ymd'], //子目录名称的命名规则
],

這裡我們設定了檔案上傳的最大大小為10MB,允許上傳的檔案後綴為jpg、gif、png 、jpeg四種格式,檔案上傳的根目錄為public/uploads/,同時設定了子目錄名稱的命名規則為依日期(年月日)來命名。

二、實作檔案上傳功能

在設定好檔案上傳參數之後,就可以開始實作檔案上傳功能了。在控制器中編寫以下程式碼:

public function upload()
{
    $file = request()->file('image');
    if ($file) {
        $info = $file->validate(['ext' => 'jpg,png,gif,jpeg'])->move(config('upload.rootPath'));
        if ($info) {
            $data = [
                'code' => 0,
                'msg' => '上传成功',
                'url' => config('upload.rootPath') . $info->getSaveName(),
            ];
        } else {
            $data = [
                'code' => 1,
                'msg' => $file->getError(),
                'url' => '',
            ];
        }
    } else {
        $data = [
            'code' => 1,
            'msg' => '请选择要上传的文件',
            'url' => '',
        ];
    }

    return json($data);
}

這裡我們先透過request()->file('image')方法取得上傳的文件,判斷文件是否存在;接著使用validate()方法對上傳的檔案後綴進行驗證,確保使用者上傳的檔案格式正確;最後使用move()方法進行檔案上傳,並傳回上傳成功或上傳失敗的結果。

三、頁面實作

最後,我們需要在頁面上實作檔案上傳功能,程式碼如下:

<form id="upload-form" action="<?php echo url('upload'); ?>" method="post" enctype="multipart/form-data">
    <input type="file" name="image" id="image" accept="image/jpeg,image/png,image/gif">
</form>
<button id="btn-upload" type="button">上传</button>

<script>
$(function() {
    $('#btn-upload').click(function() {
        var formData = new FormData($('#upload-form')[0]);
        $.ajax({
            url: $('#upload-form').attr('action'),
            type: 'post',
            data: formData,
            contentType: false,
            processData: false,
            success: function(res) {
                if (res.code === 0) {
                    alert(res.msg);
                    $('#image').val('');
                } else {
                    alert(res.msg);
                }
            },
            error: function(xhr, status, error) {
                alert('上传错误:' + error);
            }
        });
    });
});
</script>

這裡我們在頁面上新增了一個form表單,上傳檔案的input標籤的name值為'image',接著使用jQuery的ajax()方法將form資料以FormData方式上傳到控制器中,在上傳成功或失敗後進行對應的提示。

四、總結

透過上述程式碼實現,我們已經成功在ThinkPHP6中實現檔案上傳功能。同時,我們也要注意安全性,確保使用者上傳的文件格式正確、大小合適,避免上傳的文件對系統造成危害,保障使用者和系統的安全。

以上是如何實作ThinkPHP6中的檔案上傳功能的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn