首頁 後端開發 PHP問題 pc掃碼上傳 php實現

pc掃碼上傳 php實現

May 05, 2023 pm 12:47 PM

PC端掃碼上傳是近年來開發領域中的一個熱門話題,它可以方便地將本地文件上傳到伺服器,並且使用掃碼的方式替代傳統的上傳方式,更加便捷和高效。在本文中,我們將介紹如何用PHP實作PC掃碼上傳。

對於PC端掃碼上傳,我們首先需要了解幾個概念。首先是二維碼產生和掃描的原理,其次是PHP實作檔案上傳的技術。

二維碼產生和掃描原理

二維碼是一種能夠儲存大量資訊的圖形碼。它可以用於各種場合,例如連結、文字、地圖、聯絡資訊等等。產生二維碼有很多種方式,其中最常用的是使用JavaScript框架QRCode.js實作。透過這個框架,我們可以實現將文字、網址等資訊產生對應的二維碼。

在掃描二維碼時,我們可以利用手機掃描軟體使用手機相機掃描二維碼,透過掃描取得二維碼所代表的資訊。對於PC端,我們也可以使用如Zbar等掃碼軟體進行掃碼操作。

PHP實作檔案上傳技術

PHP是一種非常流行的服務端腳本語言,在Web開發領域中有著重要的地位。對於檔案上傳,PHP提供了一個非常方便的檔案上傳類別—upload類別。

在使用upload類實作檔案上傳時,我們只需要簡單地實例化該類,並使用相應的方法進行檔案上傳即可。其中,重要的方法包括:upload()、getFileName()、getErrorMsg()等。

PHP實作PC掃碼上傳

有了以上基礎知識,我們可以開始著手實作PC掃碼上傳功能了。此處我們將分為兩個部分,分別為後台文件處理和前端文件產生。

後台檔案處理

1.上傳檔案介面

首先我們需要實作一個上傳檔案的接口,用來處理前台傳輸過來的檔案流和我們需要上傳的文件資訊。針對不同的文件類型和文件大小,我們需要進行特別處理,例如限制上傳圖片的大小和類型等。

程式碼範例:

<?php
header('Content-type: application/json');
$FILE_BASE = './files/';
$MAX_SIZE = 10 * 1024 * 1024;//10M
$ALLOW_FILE_SUFFIX = ['png', 'jpg', 'jpeg', 'bmp', 'gif'];//允许上传的文件类型
$max_size_POST = ini_get('post_max_size');
$max_size_UPLOAD = ini_get('upload_max_filesize');
$max_size = min($MAX_SIZE, getBytes($max_size_POST), getBytes($max_size_UPLOAD));

$filename = $_POST['filename'];

if (empty($filename)) {
    echo json_encode(['status' => 'error', 'msg' => 'filename is empty']);
    return;
}

if(empty($_FILES) || empty($_FILES['file'])){
    echo json_encode(['status' => 'error', 'msg' => 'file is empty']);
    return;
}

$file_size = $_FILES['file']['size'];

if($file_size > $max_size){
    echo json_encode(['status' => 'error', 'msg' => 'file size is too big']);
    return;
}

$file_type = strtolower(pathinfo($_FILES["file"]["name"], PATHINFO_EXTENSION));

if(!in_array($file_type, $ALLOW_FILE_SUFFIX)){
    echo json_encode(['status' => 'error', 'msg' => 'file type is not allowed']);
    return;
}

if(!is_dir($FILE_BASE)){
    mkdir($FILE_BASE, 0777, true);
}
$file_path = $FILE_BASE.$filename;
if(move_uploaded_file($_FILES["file"]["tmp_name"], $file_path)){
    echo json_encode(['status' => 'success', 'msg' => 'upload success']);
}else{
    echo json_encode(['status' => 'error', 'msg' => 'upload fail']);
}
function getBytes($val)
{
    $val = trim($val);
    $last = strtolower($val[strlen($val) - 1]);
    $val = preg_replace('/[^0-9]/', '', $val);
    switch ($last) {
        case 'g':
            $val *= 1024 * 1024 * 1024;
            break;
        case 'm':
            $val *= 1024 * 1024;
            break;
        case 'k':
            $val *= 1024;
            break;
    }
    return $val;
}
?>
登入後複製

2.產生二維碼

產生二維碼可以使用QRCode.js框架來實作。我們需要將需要上傳的檔案名稱和相關資訊轉換為二維碼資訊後產生對應的二維碼。

程式碼範例:

<?php
$filename = $_POST['filename'];
$path = 'http://localhost/'; //服务器地址
$text = urlencode(json_encode(['filename' => $filename, 'path' => $path]));
$url = "http://qr.liantu.com/api.php?text=" . $text;
echo $url; //返回二维码地址
?>
登入後複製

前端檔案產生

在前端,我們需要產生一個二維碼並在右側預覽框中顯示出來。此外,我們還需要增加上傳文件的操作按鈕和相應的提示資訊。

程式碼範例:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>PC扫码上传</title>
    <style type="text/css">
        .upload {
            display: inline-block;
            background: #1B96F3;
            color: #fff;
            padding: 8px 12px;
            border-radius: 4px;
            cursor: pointer;
            outline: none;
        }

        .upload:hover {
            background-color: #2A87CB;
        }

        .img-preview {
            width: 200px;
            height: 200px;
            overflow: hidden;
            display: flex;
            justify-content: center;
            align-items: center;
        }

        .img-preview img {
            max-width: 100%;
            max-height: 100%;
            object-fit: contain;
        }
    </style>
</head>
<body>
    <div class="wrapper">
        <div class="qrcode-container">
            <div class="qrcode"></div>
        </div>
        <div class="upload-container">
            <input type="file" id="file" style="display:none" onchange="uploadFile(this)"/>
            <button class="upload" onclick="document.getElementById('file').click()">上传文件</button>
            <div class="alert"></div>
        </div>
        <div class="img-preview-container">
            <h4>预览</h4>
            <div class="img-preview"></div>
        </div>
    </div>

    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
    <script src="https://cdn.bootcdn.net/ajax/libs/qrcodejs/1.0.0/qrcode.min.js"></script>
    <script type="text/javascript">
        function createQrcode(url) {
            var qrcode = new QRCode(document.querySelector('.qrcode'), {
                text: url,
                width: 200,
                height: 200,
                colorDark: "#000000",
                colorLight: "#ffffff",
                correctLevel: QRCode.CorrectLevel.H
            });
        }

        function showPreview(file) {
            var fr = new FileReader();
            fr.onload = function () {
                $('<img>').attr('src', fr.result).appendTo('.img-preview');
            }
            fr.readAsDataURL(file);
        }

        function uploadFile(obj) {
            var file = obj.files[0];
            var fd = new FormData();
            fd.append('file', file);
            fd.append('filename', file.name);
            $.ajax({
                url: '/upload.php',
                type: 'POST',
                data: fd,
                processData: false,
                contentType: false,
                success: function (data) {
                    if (data.status == 'success') {
                        createQrcode(data.msg);
                        showPreview(file);
                        $('.alert').text('上传成功');
                    } else {
                        $('.alert').text('上传失败');
                    }
                },
                error: function () {
                    $('.alert').text('上传失败');
                }
            });
        }
    </script>
</body>
</html>
登入後複製

綜上所述,我們成功地完成了PC掃碼上傳的開發。在這個過程中,我們學習了二維碼產生和掃描的原理,以及PHP實作檔案上傳的技術,並且將兩者結合起來完成了PC掃碼上傳功能的實作。對於開發人員來說,這種更為便利和高效的上傳方式會成為開發中的熱門話題和需求。

以上是pc掃碼上傳 php實現的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1665
14
CakePHP 教程
1424
52
Laravel 教程
1322
25
PHP教程
1270
29
C# 教程
1249
24