tp5实现多文件上传+显示原始文件名存储+创建时间子目录

一、实现的功能:
1.多文件上传;2.显示原始文件名,而不是tp5生成的文件名;3.添加自定义文件名后再实现创建时间子目录,以便可以防止文件名相同报错。(项目开发笔记,如有需求仅做参考)
二、多文件上传功能:
有关多文件上传网上有很多实例进行参考,本次使用html5新增的multiple的功能,话不多说,前端页面代码(使用form表单进行传递,采用post方式,也可以使用ajax进行提交;样式使用bootstrap进行设计):

  <div class="form-group">
                <label class="control-label">附件</label>
                <input type="file" name="attachment[]" class="form-control" multiple="multiple">
            </div>
            <div class="form-group">
                <button type="submit" class="btn btn-primary" id="submit">发布</button>
            </div>

控制台代码(完整代码):

 //attachment为数据表的名称、表单的名称,必须一致,返回一个文件对象
                $files = Request::file('attachment');
                foreach ($files as $file)
                {
                    $name = $file->getInfo()["name"];
                    //为文件添加时间子目录
                    $name = date('Ymd').DIRECTORY_SEPARATOR .$name;
                    //文件信息验证成功后,再上传到指定的文件目录,以public为起始目录
                    $info = $file->validate([
                        'size'=>50000000
                    ])->move('attachments',$name);
                    if ($info){
                        $demo[] = $info->getSaveName();    //上传成功则赋值
                    }else {
                        $this->error($file->getError(),'admin/publicInform');        //上传失败则返回错误信息
                    }
                }
                //将数组转化为字符串存储到数据库中
                $data['attachment'] = json_encode($demo);
                //将数据写到数据表中
                if (Inform::create($data)){
                    $this->success('通知发布成功!','index/news');
                }else{
                    $this->error('通知保存失败!');
                }

三、控制台代码说明:foreach是进行多文件上传的,$name = $file->getInfo()[“name”];是取出原来上传的文件名, n a m e = d a t e ( ′ Y m d ′ ) . D I R E C T O R Y S E P A R A T O R . name = date('Ymd').DIRECTORY_SEPARATOR . name=date(Ymd).DIRECTORYSEPARATOR.name;语句实现为保留服务器端的文件添加时间子目录, $info = f i l e − > v a l i d a t e ( [ ′ s i z e ′ = > 50000000 ] ) − > m o v e ( ′ a t t a c h m e n t s ′ , file->validate([ 'size'=>50000000 ])->move('attachments', file>validate([size=>50000000])>move(attachments,name);是将文件存储到服务器端并验证大小,还可以验证类型等,具体可以参考tp5开发手册(很详细), d a t a [ ′ a t t a c h m e n t ′ ] = j s o n e n c o d e ( data['attachment'] = json_encode( data[attachment]=jsonencode(demo);语句是将数组转化为json字符串存储到数据库中,取出时采用json_decode进行取出转化为数组,Inform是我引用静态代理后实现的,可以采用Db存储到数据库中后使用其他方法。

四、结果如图(服务器文件存储与数据库信息存储结果):
服务器存储文件夹
在这里插入图片描述
五、总结:写的不是太好,仅供参考!!!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值