博客
关于我
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/

你可能感兴趣的文章
null可以转换成任意非基本类型(int/short/long/float/boolean/byte/double/char以外)
查看>>
Number Sequence(kmp算法)
查看>>
Numix Core 开源项目教程
查看>>
numpy
查看>>
Numpy 入门
查看>>
NumPy 库详细介绍-ChatGPT4o作答
查看>>
NumPy 或 Pandas:将数组类型保持为整数,同时具有 NaN 值
查看>>
numpy 或 scipy 有哪些可能的计算可以返回 NaN?
查看>>
numpy 数组 dtype 在 Windows 10 64 位机器中默认为 int32
查看>>
numpy 数组与矩阵的乘法理解
查看>>
NumPy 数组拼接方法-ChatGPT4o作答
查看>>
numpy 用法
查看>>
Numpy 科学计算库详解
查看>>
Numpy.fft.fft和numpy.fft.fftfreq有什么不同
查看>>
numpy.linalg.norm(求范数)
查看>>
Numpy.ndarray对象不可调用
查看>>
Numpy.VisibleDeproationWarning:从不整齐的嵌套序列创建ndarray
查看>>
Numpy:按多个条件过滤行?
查看>>
Numpy:条件总和
查看>>
numpy、cv2等操作图片基本操作
查看>>