Datei-Upload leicht gemacht


Im Vergleich zum ursprünglichen mühsamen Upload-Prozess wurde das Framework weitestgehend vereinfacht, wodurch der Upload-Vorgang einfacher und bequemer wird

Dateien hochladen

Der integrierte Upload erfolgt nur auf den lokalen Server. Wenn Sie auf eine Remote- oder Drittanbieterplattform hochladen, müssen Sie zusätzliche Erweiterungen installieren.

Angenommen, der Formularcode lautet wie folgt:

<form action="/index/index/upload" enctype="multipart/form-data" method="post">
<input type="file" name="image" /> <br> 
<input type="submit" value="上传" /> 
</form>

Fügen Sie dann den folgenden Code im Controller hinzu:

public function upload(){
    // 获取表单上传文件 例如上传了001.jpg
    $file = request()->file('image');
    // 上传到本地服务器
    $savename = \think\facade\Filesystem::putFile( 'topic', $file);
}

Die Variable $file ist ein thinkFile-Objekt, das Sie in Beziehung setzen können Dateiinformationen, unterstützt die Verwendung von Eigenschaften und Methoden der SplFileObject-Klasse.

Mehrere Dateien hochladen

Wenn Sie ein Formular zum Hochladen mehrerer Dateien verwenden, zum Beispiel:

<form action="/index/index/upload" enctype="multipart/form-data" method="post">
<input type="file" name="image[]" /> <br> 
<input type="file" name="image[]" /> <br> 
<input type="file" name="image[]" /> <br> 
<input type="submit" value="上传" /> 
</form>

Der Controller-Code kann sein geändert zu:

public function upload(){
    // 获取表单上传文件
    $files = request()->file('image');
    $savename = [];
    foreach($files as $file){
        $savename[] = \think\facade\Filesystem::putFile( 'topic', $file);
    }
}

Upload-Überprüfung

Unterstützt die Überprüfung hochgeladener Dateien, einschließlich Dateigröße, Dateityp und Suffix:

public function upload(){
    // 获取表单上传文件
    $files = request()->file();
    try {
        validate(['image'=>'filesize:10240|fileExt:jpg|image:200,200,jpg'])
            ->check($files);
        $savename = [];
        foreach($files as $file) {
            $savename[] = \think\facade\Filesystem::putFile( 'topic', $file);
        }
    } catch (think\exception\ValidateException $e) {
        echo $e->getMessage();
    }
}

Wenn die Überprüfung der hochgeladenen Datei fehlschlägt, gibt die Verschiebungsmethode „Falsch“ zurück.

验证参数说明
filesize上传文件的最大字节
fileExt文件后缀,多个用逗号分割或者数组
fileMime文件MIME类型,多个用逗号分隔或者数组
image验证图像文件的尺寸和类型
type文件MIME类型,多个用逗号分割或者数组

Informationen zur spezifischen Verwendung finden Sie in den integrierten Regeln im Verifizierungskapitel -> Verifizierung hochladen.


Es gibt eine zusätzliche automatische Überprüfungsregel, die prüft, ob es sich bei der Datei um eine legale Bilddatei handelt, wenn es sich bei dem hochgeladenen Dateisuffix um ein Bilddateisuffix handelt.

Fehlermeldung hochladen unterstützt mehrere Sprachen. Sie können das Sprachpaket ändern, um die Fehlermeldung zu ändern.

Regeln hochladen

Standardmäßig werden sie auf den lokalen Server hochgeladen und im Laufzeit-/Speicherverzeichnis mit dem aktuellen Datum als Unterverzeichnis generiert in Mikrosekunden Die MD5-Kodierung der Zeit als Dateiname, z. B. oben generiert Der Dateiname kann sein:

runtime/storage/topic//20160510/42a79759f284b767dfcb2a0197904287.jpg

Wenn es sich um eine Mehrfachanwendung handelt, lautet das Standard-Upload-Stammverzeichnis runtime/index/storage. Wenn Sie möchten, dass die hochgeladene Datei direkt zugänglich oder herunterladbar ist, können Sie public verwenden Lagerung.

$savename = \think\facade\Filesystem::disk('public')->putFile( 'topic', $file);

Sie können das Upload-Stammverzeichnis und die Upload-Regeln in der Konfigurationsdatei config/filesystem.php konfigurieren, zum Beispiel:

return [
    'default' =>  'local',
    'disks'   => [
        'local'  => [
            'type' => 'local',
            'root'   => app()->getRuntimePath() . 'storage',
        ],
        'public' => [
            'type'     => 'local',
            'root'       => app()->getRootPath() . 'public/storage',
            'url'        => '/storage',
            'visibility' => 'public',
        ],
        // 更多的磁盘配置信息
    ],
];

Mit der Regel können wir die Benennungsregeln für hochgeladene Dateien festlegen Methode, zum Beispiel:

// 获取表单上传文件 例如上传了001.jpg
$file = request()->file('image');
// 移动到服务器的上传目录 并且使用md5规则
$file->rule('md5')->move('../uploads/');

Der endgültig generierte Dateiname ähnelt:

application/uploads/72/ef580909368d824e899f77c7c98388.jpg

Das System stellt standardmäßig mehrere Upload-Benennungsregeln bereit, darunter:

规则描述
date根据日期和微秒数生成
md5对文件使用md5_file散列生成
sha1对文件使用sha1_file散列生成

Die MD5- und SHA1-Regeln werden automatisch gehasht Die ersten beiden Zeichen des Werts werden als Unterverzeichnis und der folgende Hashwert als Dateiname verwendet.

Wenn Sie benutzerdefinierte Benennungsregeln verwenden müssen, können Sie eine Funktion oder Methode in der Regelmethode übergeben, zum Beispiel:

// 获取表单上传文件 例如上传了001.jpg
$file = request()->file('image');
// 移动到服务器的上传目录 并且使用uniqid规则
$file->rule('uniqid')->move('../uploads/');

Der generierte Dateiname ähnelt:

application/uploads/573d3b6d7abe2.jpg

Wenn du möchtest Wenn Sie den ursprünglichen Dateinamen beibehalten möchten, können Sie Folgendes verwenden:

// 获取表单上传文件 例如上传了001.jpg
$file = request()->file('image');
// 移动到服务器的上传目录 并且使用原文件名
$file->move('../uploads/','');

Standardmäßig wird die Datei mit demselben Namen im Server-Upload-Verzeichnis überschrieben. Wenn Sie sie nicht überschreiben möchten kann Folgendes verwenden:

// 获取表单上传文件 例如上传了001.jpg
$file = request()->file('image');
// 移动到服务器的上传目录 并且设置不覆盖
$file->move('../uploads/',true,false);

, um die Datei ha zu erhalten sh-Hash-Wert

kann den Hash-Wert der hochgeladenen Datei abrufen, zum Beispiel:

// 获取表单上传文件
$file = request()->file('image');
// 移动到服务器的上传目录 并且使用原文件名
$upload = $file->move('/home/www/upload/');
// 获取上传文件的hash散列值
echo $upload->md5();
echo $upload->sha1();

Sie können die Hash-Methode verwenden, um den Datei-Hash-Wert

// 获取表单上传文件
$file = request()->file('image');
// 移动到服务器的上传目录 并且使用原文件名
$upload = $file->move('/home/www/upload/');
// 获取上传文件的hash散列值
echo $upload->hash('sha1');
echo $upload->hash('md5');
<🎜 zu erhalten >

Objekt zurückgeben

Nach einem erfolgreichen Upload wird weiterhin ein File-Objekt zurückgegeben. Zusätzlich zu den Methoden des File-Objekts selbst können die Eigenschaften und Methoden von SplFileObject verwendet werden, um die spätere Dateiverarbeitung zu erleichtern.