Muat naik fail dipermudahkan


Berbanding dengan proses muat naik asal yang menyusahkan, rangka kerja telah dipermudahkan ke tahap yang terbaik, menjadikan operasi muat naik lebih mudah dan lebih mudah

Muat naik fail

Muat naik terbina dalam hanya dimuat naik ke pelayan tempatan, dimuat naik ke platform jauh atau pihak ketiga memerlukan sambungan tambahan untuk dipasang.

Andaikan kod borang adalah seperti berikut:

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

Kemudian tambah kod berikut dalam pengawal:

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

Pembolehubah $file ialah objek thinkFile Anda boleh mendapatkan maklumat fail berkaitan dan menyokong penggunaan sifat dan kaedah Kelas SplFileObject.

Muat naik berbilang fail

Jika anda menggunakan borang muat naik berbilang fail, contohnya:

<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>

Kod pengawal boleh ditukar kepada:

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

Pengesahan muat naikfail kemas kini

termasuk fail Saiz, jenis fail dan akhiran:

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();
    }
}

Jika fail yang dimuat naik gagal pengesahan, kaedah pindah akan mengembalikan palsu. Parameter pengesahan atau tatasusunan

fileMimeimejSahkan saiz dan jenis fail imej Jenis fail, dipisahkan koma berbilang atau tatasusunan

Untuk penggunaan khusus, sila rujuk peraturan terbina dalam dalam bab pengesahan -> Pengesahan Muat Naik.


Terdapat peraturan pengesahan automatik tambahan bahawa jika akhiran fail yang dimuat naik ialah imbuhan fail imej, ia akan menyemak sama ada fail itu adalah fail imej yang sah.

Mesej ralat muat naik menyokong berbilang bahasa Anda boleh mengubah suai pek bahasa untuk mengubah suai mesej ralat.

Peraturan muat naik

Secara lalai, ia dimuat naik ke pelayan tempatan, dan fail dengan tarikh semasa sebagai subdirektori dan pengekodan md5 masa mikrosaat kerana nama fail akan dijana di bawah direktori masa jalan/storan, seperti yang dijana di atas Nama fail mungkin:

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

Jika ia adalah aplikasi berbilang, direktori akar muat naik lalai kepada masa jalan/indeks/storan Jika anda mahu fail yang dimuat naik boleh diakses secara terus atau boleh dimuat turun, anda boleh gunakan storan awam.

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

Anda boleh mengkonfigurasi direktori root muat naik dan peraturan muat naik dalam fail konfigurasi config/filesystem.php, contohnya:

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

Kami boleh menentukan peraturan penamaan untuk fail yang dimuat naik, hanya gunakan kaedah peraturan, contohnya:

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

Yang akhir dijana Nama fail adalah serupa dengan:

application/uploads/72/ef580909368d824e899f77c7c98388.jpg

Sistem menyediakan beberapa peraturan penamaan muat naik secara lalai, termasuk:

fail MIME taip, berbilang dipisahkan koma atau tatasusunan
jenis
berdasarkan mikrosaatmd5 Gunakan generasi hash md5_file untuk files sha1use sha1_file hash generasi untuk fail
PeraturanPenerangan
tarikh mikrosaat


the md5 dan sha1 peraturan secara automatik akan menggunakan dua aksara pertama nilai hash sebagai subdirektori, dan nilai Hash berikut sebagai nama fail.

Jika anda perlu menggunakan peraturan penamaan tersuai, anda boleh memasukkan fungsi atau kaedah dalam kaedah peraturan, contohnya:

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

Nama fail yang dijana adalah serupa dengan:

application/uploads/573d3b6d7abe2.jpg

Jika anda ingin menyimpan yang asal nama fail, anda boleh menggunakan:

// 获取表单上传文件 例如上传了001.jpg
$file = request()->file('image');
// 移动到服务器的上传目录 并且使用原文件名
$file->move('../uploads/','');
Secara lalai, fail dengan nama yang sama dalam direktori muat naik pelayan akan ditimpa Jika anda tidak mahu menulis ganti, anda boleh menggunakan:
// 获取表单上传文件 例如上传了001.jpg
$file = request()->file('image');
// 移动到服务器的上传目录 并且设置不覆盖
$file->move('../uploads/',true,false);

Dapatkan nilai cincangan cincang fail.

Anda boleh mendapatkan nilai cincangan cincang bagi fail yang dimuat naik, contohnya:

// 获取表单上传文件
$file = request()->file('image');
// 移动到服务器的上传目录 并且使用原文件名
$upload = $file->move('/home/www/upload/');
// 获取上传文件的hash散列值
echo $upload->md5();
echo $upload->sha1();
Anda boleh menggunakan kaedah cincang secara seragam untuk mendapatkan nilai cincangan fail
// 获取表单上传文件
$file = request()->file('image');
// 移动到服务器的上传目录 并且使用原文件名
$upload = $file->move('/home/www/upload/');
// 获取上传文件的hash散列值
echo $upload->hash('sha1');
echo $upload->hash('md5');

Kembalikan objek


Selepas itu berjaya dimuat naik masih merupakan objek Fail yang dikembalikan Sebagai tambahan kepada kaedah objek Fail itu sendiri, anda juga boleh menggunakan sifat dan kaedah SplFileObject Memudahkan pemprosesan fail berikutnya.

🎜🎜 🎜