thinkphp6,压缩图片内存,并上传到oss,质量影响不大。

本文介绍了如何使用ThinkPHP与阿里云OSS进行文件上传,包括配置阿里云存储、限制内存、图片格式验证、本地存储与压缩,并展示了关键步骤和代码实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先安装官方推荐的上传云端插件 Thans / thinkphp-filesystem-cloud

1采用composer安装

composer require thans/thinkphp-filesystem-cloud

2: 在config/filesystem.php中添加阿里云到配置

<?php

return [
    // 默认磁盘
    'default' => env('filesystem.driver', 'aliyun'),
    // 磁盘列表
    'disks'   => [
        'local'  => [
            'type' => 'local',
            'root' => app()->getRuntimePath() . 'storage',
        ],
        'public' => [
            // 磁盘类型
            'type'       => 'local',
            // 磁盘路径
            'root'       => app()->getRootPath() . 'public/storage',
            // 磁盘路径对应的外部URL路径
            'url'        => '/storage',
            // 可见性
            'visibility' => 'public',
        ],
        // 更多的磁盘配置信息
        'aliyun' => [
            'type'         => 'aliyun',
            'accessId'     => env('oss.accessid'),
            'accessSecret' => env('oss.accesssecret'),
            'bucket'       => env('oss.bucket'),
            'endpoint'     => env('oss.endpoint'),
            'url'          => 'https://'.env('oss.endpoint'),//不要斜杠结尾,此处为URL地址域名。
        ],
    ],
];

3在您的环境中安装好Imagick扩展库,这个自行找教程安装,推荐用这个压缩,gd压缩占内存

4然后编写业务逻辑代码

<?php

namespace app\controller;


use think\facade\App;
use think\facade\Filesystem;
use think\File;
use app\BaseController;
class Upload extends BaseController
{
    public function uploadImg()
    {



        $file = request()->file('file');



        try {
        	//限制内存 2m
            $file_size = 1024 * 1024 * 2;
			//验证图片格式
            validate(['file' => [
                'fileSize' => $file_size,
                'fileExt' => 'jpg,png,gif,jpeg,bmp',
                'fileMime' => 'image/jpeg,image/png,image/gif',
            ]])
                ->check(['file' => $file]);




			//先将图片保存到本地
            $local_savename = Filesystem::disk('local')->putFile(config('app.app_name'), $file);
            $local_savename_path = App::getRootPath() . "runtime/storage/" . $local_savename;
			//获取图片后缀
            $res_extension = $file->extension();
			//  以下类型的图片才可以压缩,gif不行
            if ($res_extension == 'jpg' || $res_extension == 'jpeg' || $res_extension == 'png') {
                //压缩图片
                $small_image = new \Imagick($local_savename_path);
                //压缩程度75%,测试过75比较好,质量差距不大
                $small_image->setImageCompressionQuality(75);
                $res = $small_image->writeImage($local_savename_path);

                $small_image->clear();
                $small_image->destroy();
            }


         



			//将本地压缩后的图片转为对象
            $f = new File($local_savename_path);








			//上传到oss  我默认是oss  ,不选disk就是上传到oss
            $savename = Filesystem::putFile(‘topic’, $f);
            //上传的路径有时会变成\\,转一下
            $savename = str_replace("\\", "/", $savename);
			//删除本地的压缩后的图片
            @unlink($local_savename_path);
			
			//拿到上传到oss到图片路径
			echo  $savename;
          
        } catch (\think\exception\ValidateException $e) {

		   echo 'fail';
         
        }
    }
}

这是用云开发开发的小程序,可以参考一下

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值