博客
关于我
Thinkphp3.2.3 多图上传,同类型只能上传一张问题
阅读量:374 次
发布时间:2019-03-05

本文共 2096 字,大约阅读时间需要 6 分钟。

在Thinkphp3.2.3版本中,实现多图上传功能时,遇到了一种问题:当尝试一次性上传多张.jpg文件时,系统只保存最后一张文件。经过深入分析,问题的根源在于文件的保存名(saveName)设置上。以下是详细的解决方案和优化方法。

问题背景

在使用Thinkphp框架进行文件上传时,如果在同一类型下尝试一次性上传多张图片文件(如.jpg格式),系统可能会只保存最后一张文件而忽略其他文件。经过多次调试和尝试,发现问题主要出现在文件的唯一性识别机制上。

传统解决方法的局限

在早期的解决方案中,开发者通常会尝试通过设置不同的文件扩展名或使用不同的上传路径来实现多图上传。但由于系统内部的唯一性控制机制,这种方法往往无法有效解决问题。

引入唯一标识符

为了确保每个上传的文件具有唯一性,避免重复存储,我们可以引入唯一标识符(UUID)来为每个文件生成独特的保存名。这种方法不仅能保证文件的唯一性,还能避免同名文件的冲突。

UUID生成方法

App/Common/Common/function.php文件中,可以添加如下代码来生成唯一标识符:

function guid() {    if (function_exists('com_create_guid')) {        return com_create_guid();    } else {        mt_srand((double) microtime() * 10000);        $charid = strtoupper(md5(uniqid(rand(), true)));        $hyphen = chr(45); // 使用下划线替代原有的连接符        $uuid = substr($charid, 0, 8) . $hyphen               . substr($charid, 8, 4) . $hyphen               . substr($charid, 12, 4) . $hyphen               . substr($charid, 16, 4) . $hyphen               . substr($charid, 20, 12);        return $uuid;    }}

上传方法优化

在文件上传的处理逻辑中,修改saveName的设置方式:

public function upload() {    $upload = new \Think\Upload();    $upload->maxSize = 0;    $upload->exts = array('jpg', 'gif', 'png', 'jpeg');    $upload->rootPath = './Public/upload/';    $upload->savePath = 'thumb/';    $upload->saveName = array('guid', '');    $info = $upload->upload();    if (!$info) {        $this->error($upload->getError());    } else {        $this->success('上传成功!');    }}

生成的文件路径优化

为了使文件路径更加友好,可以对生成的UUID进行优化处理。例如:

if (function_exists('com_create_guid')) {    return com_create_guid();} else {    mt_srand((double) microtime() * 10000);    $charid = strtoupper(md5(uniqid(rand(), true)));    $hyphen = chr(95); // 使用下划线替代原有的连接符    $uuid = substr($charid, 0, 8) . $hyphen           . substr($charid, 8, 4) . $hyphen           . substr($charid, 12, 4) . $hyphen           . substr($charid, 16, 4) . $hyphen           . substr($charid, 20, 12);    return $uuid;}

经过上述优化,生成的文件路径将变为:

C4D414B3_D751_173B_BCD9_F8C8CE95C5F5.jpg

总结

通过在文件上传过程中引入唯一标识符(UUID)为每个文件生成独特的保存名,可以有效避免同名文件的冲突问题。这种方法不仅保证了文件的唯一性,还提高了系统的稳定性和可靠性。在实际应用中,建议根据具体需求对文件命名规则进行调整,以满足更复杂的使用场景。

转载地址:http://qtdwz.baihongyu.com/

你可能感兴趣的文章
Nginx的是什么?干什么用的?
查看>>
Nginx访问控制_登陆权限的控制(http_auth_basic_module)
查看>>
nginx负载均衡器处理session共享的几种方法(转)
查看>>
nginx负载均衡的5种策略(转载)
查看>>
nginx负载均衡的五种算法
查看>>
Nginx运维与实战(二)-Https配置
查看>>
Nginx配置ssl实现https
查看>>
Nginx配置TCP代理指南
查看>>
Nginx配置——不记录指定文件类型日志
查看>>
Nginx配置代理解决本地html进行ajax请求接口跨域问题
查看>>
Nginx配置参数中文说明
查看>>
Nginx配置好ssl,但$_SERVER[‘HTTPS‘]取不到值
查看>>
Nginx配置实例-负载均衡实例:平均访问多台服务器
查看>>
NIFI大数据进阶_连接与关系_设置数据流负载均衡_设置背压_设置展现弯曲_介绍以及实际操作---大数据之Nifi工作笔记0027
查看>>
NIO ByteBuffer实现原理
查看>>
Nio ByteBuffer组件读写指针切换原理与常用方法
查看>>
NIO Selector实现原理
查看>>
nio 中channel和buffer的基本使用
查看>>
NIO基于UDP协议的网络编程
查看>>
NISP一级,NISP二级报考说明,零基础入门到精通,收藏这篇就够了
查看>>