Open ziqiming opened 5 days ago
方法1:上传的时候可以不指定名称,上传后重命名并转换,然后删除原先图片; 方法2:可以上传时统一指定为png后缀,上传后同名覆盖并转换;
$up = ...... //图片上传过程,上传 1.jpg $res = $up->get_file(); //获取上传后结果(数组)
if($res['file'] 的文件类型不是png){ $im = boa::image()->open($res['file']); //打开上传后的图片 $file = $im->save('路径/1.png'); //重命名并转换为1.png保存 unlink($res['file']); //使用方法1时 删除原先的图片 }
上传是上传,转换是转换,请分别参考: 手册 > 附录 > upload类 和 image类
文件类型:boa::fileinfo类
其实我也想过改名后再删除,可这样就是双倍IO消耗,而且对业务逻辑代码体验不够好,本来可以简化的处理缺为了这个点增加了很多精力和时间,用框架不就应该越简便越好吗?本来在这个name方法上简单处理的事情,这个name的用处我也想不到了。
方法1:上传的时候可以不指定名称,上传后重命名并转换,然后删除原先图片; 方法2:可以上传时统一指定为png后缀,上传后同名覆盖并转换;
$up = ...... //图片上传过程,上传 1.jpg $res = $up->get_file(); //获取上传后结果(数组)
if($res['file'] 的文件类型不是png){ $im = boa::image()->open($res['file']); //打开上传后的图片 $file = $im->save('路径/1.png'); //重命名并转换为1.png保存 unlink($res['file']); //使用方法1时 删除原先的图片 }
上传是上传,转换是转换,请分别参考: 手册 > 附录 > upload类 和 image类
后续工作太多了 图片文件可以用boa::image重新保存并删除原图
文件格式呢?boa::file 没有save,没有copy.没有移动,没有删除 还要原生写啊
$file = boa::file(); $file->copy('源文件','复制到'); $file->del('源文件' , '复制到');
为什么不加这种方法,文件操作居然没有增删改
文件上传。我修改了文件上传路径 $up->cfg('path' , 'img/');
上传还会自动加上 年/月/日 的文件夹我老天啊。。
boa::image()->save()
保存前还要先创建文件夹。方法不能自动创建吗
手册 > 附录 > upload类 和 image类 再强调一遍,多看手册可以解决90%+的常见问题
不需要你说的boa::file,我给你的例子就是完整带转换的 文件路径可以自定义,多看手册
如果不想后端这么做,可以方法3:用JS转换图片格式后上传
写代码,越简单,越潇洒 物物而不物于物,不要为代码而代码
boa::file() 只是改名 boa::image() 不仅可以改名,还可以格式转换
图片不仅是改名,还需要格式转换 要不后端转换,要不前端用JS转换后上传
方法4:直接改个后缀就可以(适合要求不严格的)
上传时不管什么格式,统一命名xxx.png,浏览器可以显示
为更方便使用,image类将在下个小版本优化调整下
其实 更应该优化的是
upload
1、指定了设置目录,不应该按年月日再目录下面生成 年月日等文件夹 当前系统默认目录为 www/file 上传默认为文件为 www/file/2024/12/01/文件.png 应该有一个关闭这个自动生成年月日文件夹的配置
用户自定义上传目录后 www/file/img 上传文件应该为 www/file/img/文件.png
2、修改文件名的处理 $up->cfg('name' , '新名字');
如用户上传xls文件 配置了修改名字 默认结果为 www/file/2024/12/01/新名字
这里我认为结果应该为 www/file/2024/12/01/新名字.xls
除非我理解这个name的用法不是这样用的,,那就应该有一个新的方法,比如 $up->cfg('setName' , '新名字'); 不要改变后缀名
看手册 如果手册表述不明确,我下个版本修订
$up = boa::upload() $up->cfg('path' ,'D:/test/'); $up->cfg('name' ,'1.jpg'); //单纯名称,结果:D:/test/1.jpg $up->cfg('name' ,'/a/1.jpg'); //相对路径,结果:D:/test/a/1.jpg $up->cfg('name' ,'D:/test/b/1.jpg'); //绝对路径,结果:D:/test/b/1.jpg
看手册,每个上传方法第二个参数指定保存路径,等同于设定name,例子同上
设置了 $up->cfgh('name' , '文件名' ) 确实是不自动生成文件名,但是需要提前把后缀名写上,否则文件改名不带后缀名,这个是我在上传模块上遇到最大的坑
因为配置项时还不知道用户上传的文件是什么后缀名 $file = $up->get_file(); get_file后才能得到后缀名,可这个时候已经把文件上传成功了。
这样一来,后面就有一系列的改名复制工作,要么就需要和前端沟通写死那个页面支持的格式后缀名。而不能上传其他了,没有灵活性了 上传的文件名和后缀名必须是两个处理才具有灵活性。
希望是在上传之前就把文件需要配置的做完然后上传好的文件几乎不用动
我其实也可以强制修改框架,但是后面就不能与新版本同步,或者说是预新版本同步就有一些特别注意的工作。
另外我看到源码里面 upload 方法里面有对后缀名的单独变量,应该在 get_file 返出来!
需求是这样的
上传一张原图和同时一张使用前端裁剪插件的小图
要把这两张图片保存到
./file/img/956544.png ./file/img/thumb/956544.png
$up = boa::upload()
$up->cfg('path' , $this->up->cfg('path') . 'img/');
//问题在这里面,,前端上传的有可能是JPG,,这只改ID名字,后缀名不能写死,这个时候还没有得到图片资源呢? $up->cfg('name' , $this->id . '.png'); $file = $up->one('max');
$up->cfg('path' , $this->up->cfg('path') . 'thumb/'); $file = $up->one('min');
就是说这个改名字,起始就是想之改文件名,不改后缀名啊。。好麻烦啊