Slim框架导入csv文件并将文件内容导入数据库

35 篇文章 0 订阅
1 篇文章 0 订阅

可以选择form表单提交或者Ajax提交,form表单简单点,所以我选择Ajax。

一、前端

html

<tr>
    <td><input type="file" name="file" id="file"/></td>
</tr>
<tr>
    <td><input type="submit" name="submit" id="csv" value="导入" class="btn btn-brand" style="width: 100px;"/></td>
</tr>

js

       function csv_file() {
           //判断是否上传文件
            if($('#file')[0].files.length == 0){
                $("#result").modal();
                $$.getElementById('msg').innerHTML = '请选择上传文件。';
                return;
            }

            var csv_file = $('#file')[0].files[0];
            var formData = new FormData();
            formData.append("file",csv_file);

            $.ajax({
                url: '/admin/node/csv',
                data: formData,
                cache: false,
//                contentType: 'multipart/form-data',
                contentType: false,// 不要设置Content-Type请求头
                processData: false,// 使数据不做处理
                type: 'POST',
                success: function(data){
                    data = JSON.parse(data);
                    console.log(data);
                    $("#result").modal();
                    $$.getElementById('msg').innerHTML = data.msg;
                },
                error: function(data){
                    $("#result").modal();
                    $$.getElementById('msg').innerHTML = '服务器发生错误了。';
                }
            });
        }
        $$.getElementById('csv').addEventListener('click', csv_file);

二、后端

public function cvs($request, $response, $args)
    {
//        $request->getUploadedFiles()  等同于  $_FILES
//        header("Access-Control-Allow-Origin: *"); //防止跨域报错

        $files = $request->getUploadedFiles();
        if (empty($files['file'])) {
            $rs['ret'] = 0;
            $rs['msg'] = '请选择上传文件!';
            return $response->getBody()->write(json_encode($rs));
        }

        $newfile = $files['file'];
        // do something with $newfile

        //将上传的缓存文件备份到storage/upload目录下
        $move_path = STORAGE_PATH.'upload/';
        if ($newfile->getError() === UPLOAD_ERR_OK) {
            $uploadFileName = $newfile->getClientFilename();
            $newfile->moveTo($move_path.$uploadFileName);
        } else {
            $rs['ret'] = 0;
            $rs['msg'] = '缓存文件移动失败!';
            return $response->getBody()->write(json_encode($rs));
        }
//        setlocale(LC_ALL, 'zh_CN'); //设置简体中文
        $filepath = $move_path.$uploadFileName;
        if (($handle = fopen($filepath, "r")) !== FALSE) {
            while (($data = fgetcsv($handle, 10000, ",")) !== FALSE) {
                $node = '';
                if (count($data) == 10){
                    $node = new Node();
                    $node->name    = isset($data[0]) && !empty($data[0]) ? trim($data[0]) : time();
                    $node->server  = isset($data[1]) ? trim($data[1]) : '';

                    $node->save();
                }else{
                    $rs['ret'] = 0;
                    $rs['msg'] = '请检查配置文件是否正确,不需要填写的请留空!';
                    return $response->getBody()->write(json_encode($rs));
                }
            }
            fclose($handle);

        } else {
            $rs['ret'] = 0;
            $rs['msg'] = '文件打开失败,请查看文件执行权限!';
            return $response->getBody()->write(json_encode($rs));
        }

//        $csvAsArray = array_map('str_getcsv', file($filepath));//数组形式

        $rs['ret'] = 1;
        $rs['msg'] = '上传成功';
        return $response->getBody()->write(json_encode($rs));
    }

配置文件后缀为 txt 或者 cvs 都可以,但是要使用UTF-8的编码方式,格式如下:

test,无描述,0      //第一种

or

"test","无描述",0  //第二种

逗号为半角的,引号为双引号。

经测试,如果是第一种写法,选择UTF-8编码方式,不管有没有BOM头都没关系;如果是第二种写法,就需要选择无BOM的UTF-8编码方式,不然头部会有多余不可见字符。所以,推荐第一种

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值