欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > php >内容正文

php

ThinkPHP6项目基操(17.实战部分 Filesystem文件上传)

发布时间:2025/3/15 php 41 豆豆
生活随笔 收集整理的这篇文章主要介绍了 ThinkPHP6项目基操(17.实战部分 Filesystem文件上传) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

Filesystem文件上传

控制器:

<?php namespace app\admin\controller; use app\BaseController; use think\facade\Filesystem; use think\facade\View;class Upload extends BaseController {// 上传页面public function index(){return View::fetch("index");}// 上传文件方法public function image(){if(!$this->request->isPost()){return show(config("status.error"), "请求不合法");}$file = $this->request->file("file");$savename = Filesystem::putFile('topic', $file);if(!$savename){return show(config("status.error"), "上传图片失败");}return show(config("status.success"), "上传成功", ["savename"=>$savename]);} }

默认情况下是上传到本地服务器,会在runtime/storage目录下面生成以当前日期为子目录,以微秒时间的md5编码为文件名的文件,例如:

考虑到runtime目录不能直接访问,如果你希望上传的文件是可以直接访问或者下载的话,可以使用public存储方式(也可以自定义目录):

$savename = Filesystem::disk('public')->putFile('topic', $file);

上传结果:

为什么这里多了一层storage目录呢?因为在config配置文件里配置了默认的根目录,在
filesystem.php 配置文件:

<?phpreturn [// 默认磁盘'default' => env('filesystem.driver', 'local'),// 磁盘列表'disks' => ['local' => ['type' => 'local','root' => app()->getRuntimePath() . 'storage',],'public' => [// 磁盘类型'type' => 'local',// 磁盘路径'root' => app()->getRootPath() . 'public/storage',// 磁盘路径对应的外部URL路径'url' => '/storage',// 可见性'visibility' => 'public',],// 更多的磁盘配置信息], ];

如果不希望有storage目录,可以修改public的配置:

'root' => app()->getRootPath() . 'public',

结果:

前端页面

这里是使用了layuiadmin的页面:

<!DOCTYPE html> <html> <head><meta charset="utf-8"><title>上传</title><meta name="renderer" content="webkit"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0"><link rel="stylesheet" href="{__STATIC__}/admin/layuiadmin/layui/css/layui.css" media="all"><link rel="stylesheet" href="{__STATIC__}/admin/layuiadmin/style/admin.css" media="all"> </head> <body><style>.layui-upload-img{width: 92px; height: 92px; margin: 0 10px 10px 0;}</style><div class="layui-fluid"><div class="layui-row layui-col-space15"><div class="layui-col-md12"><div class="layui-card"><div class="layui-card-header">普通图片上传</div><div class="layui-card-body"><div class="layui-upload"><button type="button" class="layui-btn" id="test-upload-normal">上传图片</button><div class="layui-upload-list"><img class="layui-upload-img" id="test-upload-normal-img"><p id="test-upload-demoText"></p></div></div></div></div></div></div></div><script src="{__STATIC__}/admin/layuiadmin/layui/layui.js"></script><script>layui.config({base: '{__STATIC__}/admin/layuiadmin/'}).extend({index: 'lib/index'}).use(['index', 'upload'], function(){var $ = layui.jquery,upload = layui.upload;//普通图片上传var uploadInst = upload.render({elem: '#test-upload-normal',url: '/admin/upload/image',before: function(obj){//预读本地文件示例,不支持ie8obj.preview(function(index, file, result){$('#test-upload-normal-img').attr('src', result);});},done: function(res){if(res.status === 1){return layer.msg('上传成功');}else{return layer.msg('上传失败');}},error: function(){var demoText = $('#test-upload-demoText');demoText.html('<span style="color: #FF5722;">上传失败</span> <a class="layui-btn layui-btn-mini demo-reload">重试</a>');demoText.find('.demo-reload').on('click', function(){uploadInst.upload();});}});});</script> </body> </html>

Tips: 可以在上传控制器做文件的类型、大小等属性校验。


⭐️重磅推荐:免费商用电商系统

😏想白嫖整个电商系统用来商用?
🤑想有自己的商城实现财富自由?
🤓想学习最佳实践提升自己技术?

快来进入🚀 传送门 🚀,开源免费、完整示例带你快速入门,轻松二开,走上人生巅峰!👨‍🎓

总结

以上是生活随笔为你收集整理的ThinkPHP6项目基操(17.实战部分 Filesystem文件上传)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。