h5图片压缩后变为base64格式的流地址上传服务器

**操作逻辑:前端把图片压缩变为base64格式的流地址,然后把base64格式的流地址传输到后端进行上传到cos服务器

操作流程**
1.前端:我这里是通过uniapp开发h5的,upLoadPutBase64是封装好的上传后端服务器的接口

复制代码
div写上
<helang-compress ref="helangCompress"></helang-compress>


引入压缩文件
	import helangCompress from '../../components/helang-compress/helang-compress';

// 单张压缩
					this.$refs.helangCompress.compress({
						src: filePath,
						maxSize: 800,
						fileType: 'jpg',
						quality: 0.85,
						minSize: 640 //最小压缩尺寸,图片尺寸小于该时值不压缩,非H5平台有效。若需要忽略该设置,可设置为一个极小的值,比如负数。
					}).then((res1) => {
						// 压缩成功回调
						// console.log('压缩成功回调', res1)
						upLoadPutBase64({ //发送请求给后端
							base64: res1
						}).then(resdata => {
							if (resdata.data.code == 200) {
								//更新信息
								undateUserInfo({
									avatar: resdata.data.url
								}).then(res => {
									if (res.data.code != 200) {
										return uni.$u.toast(res.data.message)
									}
									this.userInfo.avatar = resdata.data.url
									uni.setStorage({
										key: 'userInfo',
										data: JSON.stringify(this
											.userInfo),
									})
									uni.hideLoading();
									uni.$u.toast('上传成功');
								})
							} else {
								uni.hideLoading();
								uni.$u.toast('上传失败');
							}
						})
					}).catch((err) => {
						// 压缩失败回调
						uni.hideLoading();
						uni.$u.toast('上传失败');
					})

后端hyperf

复制代码
   //将Base64转为图片并保存到cos服务器
    #[RequestMapping(path: "putBase64", methods: ["POST"])]
    #[Middleware(middleware: UserJwtMiddleware::class)]
    public function putBase64(RequestInterface $request)
    {
        $file = $request->input('base64'); // 获取上传的文件
        $base64Prefix = 'data:image/jpeg;base64,';
        $base64Image = substr($file, strlen($base64Prefix));
        // 处理上传逻辑,保存文件到本地或其他操作
        // 示例:上传文件到 COS
        $cosObjectName = 'ultra/' . date('YmdHis') . '/' . uniqid() . '.png';
        $secretId = env('COS_SECRET_ID'); // 替换为你的 secretId
        $secretKey = env('COS_SECRET_KEY'); // 替换为你的 secretKey
        $region = env('COS_REGION'); // 替换为你的 COS 存储桶所在的地域
        // 初始化 COS 客户端
        $cosClient = new Client([
            'region' => $region, // COS 服务地域
            'schema' => 'https', // 协议头部,默认为 http
            'credentials' => [
                'secretId' => $secretId,
                'secretKey' => $secretKey
            ]
        ]);
        try {
            // 发起创建多部分上传请求
            $result = $cosClient->putObject(array(
                'Bucket' => env('COS_BUCKET_COS_APPID'), // 替换为你的 COS 存储桶名称,BucketName-Appid
                'Key' => $cosObjectName,   // 替换为你的对象名称,例如:test/example.jpg
                'Body' => base64_decode($base64Image),
            ));
            // 输出的结果为标准json格式
            return [
                'code' => 200,
                'message' => 'success',
                'url' => env('COS_DOMAIN') . '/' . $result['Key'],
            ];
            // print_r($result);
        } catch (\Exception $e) {
            // 输出请求失败时的异常信息
            // echo $e->getMessage();
            $logger = logger();
            $logger->debug('文件上传请求异常信息=', ['exception' => $e, 'uniqueId' => uniqid()]);
            return [
                'code' => 500,
                'message' => 'fail',
                'getMessage' => $e->getMessage(),
            ];
        }
    }
相关推荐
Nayxxu20 分钟前
Claude API 生产稳定性设计:超时、降级、备用模型和告警怎么做
开发语言·php
狗凯之家源码网2 小时前
三角洲行动护航系统源码部署与运营指南
开源·php
huipeng92611 小时前
企业级微服务开发实战(三):公共模块设计与统一规范封装
java·spring boot·spring cloud·微服务·架构·系统架构·php
say_fall11 小时前
模拟量输入输出技术超详细知识点总结
linux·开发语言·嵌入式硬件·学习·php
禅思院11 小时前
大列表性能优化 · 工程实战·四
开发语言·前端·性能优化·前端框架·php·异步加载
夜郎king14 小时前
湖南高考天气查询:基于 HTML5 与百度天气 API 实现页面展示
前端·html5·百度天气实践·天气信息可视化
佛山个人技术开发1 天前
个人建站接单|汽车汽配行业宽屏自适应官网模板 工厂企业定制建站源码
前端·css·前端框架·html·汽车·php
雪度娃娃1 天前
ASIO异步通信——多线程模型
开发语言·网络·c++·php
佛山个人技术开发1 天前
高端旅游风景区酒店民宿网站模板 自适应宽屏文旅酒店源码
前端·html5·旅游
㳺三才人子1 天前
初探 Flask-WTF
后端·python·flask·html5