-->

PHP资讯

您的当前位置:首页 > 资讯 > Laravel框架

laravel安装composer依赖Excel

2018-07-30 14:02:11  来源:admin 点击:991

Laravel中使用Laravel Excel 实现Excel文件导入导出

原文链接:http://laravelacademy.org/post/2024.html GitHub地址:https://github.com/Maatwebsite/Laravel-Excel
一、安装
根目录下安装依赖
composer require maatwebsite/excel ~2.0.0
安装成功之后
发现composer.json文件里的"require"多了一行:
"maatwebsite/excel": "~2.1.0",
还有vendor目录下面多了一个maatwebsite的文件夹
二、配置
在config/app.php中注册服务提供者到providers数组:
Maatwebsite\Excel\ExcelServiceProvider::class,
同样在config/app.php中注册门面到aliases数组:
'Excel' => Maatwebsite\Excel\Facades\Excel::class,
如果想要对Laravel Excel进行更多的自定义配置,执行以下命令:
php artisan vendor:publish
执行成功后会在config目录下生成一个配置文件excel.php可以自行修改excel的配置信息
三、导出Excel文件
执行
php artisan make:controller ExcelController 
生成一个Excel的控制器
并在routes/api.php里添加路由信息
Route::get('excel/export','ExcelController@export');
Route::get('excel/import','ExcelController@import');
然后在ExcelController 里定义export文件导出方法
sheet('score', function($sheet) use ($cellData){
            $sheet->rows($cellData);
        });
    })->store('xls')->export('xls');
}
我们在浏览器中访问接口地址api/excel/export,会导出一个名为模板文件.xls的Excel文件

如果你要导出csv或者xlsx文件,只需将export方法中的参数改成csv或xlsx即可。

在这里被坑了一把,一开始直接参照模板来,没有在export导出方法里改那个iconv

然后直接在import里直接套用的里面带有iconv的导入方法,然后一直报一个

Notice: iconv() [function.iconv]: Detected an illegal character in input string ...

这样的错误,然后按照网上的各种方法也改了,也还是没用,
然后最后是先把export里的文件在创建的时候就要跟import里的一样用iconv,
在下面导入Excel的时候才不会报那个错误。。。。
四、导入Excel文件
我们将刚才保存到服务器上的Excel文件导入进来,导入很简单,使用Excel门面上的load方法即可:

//Excel文件导入功能 By Laravel学院
public function import(){
    $filePath = 'storage\exports/'.iconv('UTF-8', 'GBK', '模板文件').'.xls';
    Excel::load($filePath, function($reader) {
        $data = $reader->all();
        dd($data);
    });
}
然后在浏览器中访问接口地址/api/excel/import即可

Laravel中使用Laravel 图片上传 实现图片文件导入

内容待续

Laravel中使用Laravel 视频上传 实现视频文件导入

内容待续

Laravel中使用Laravel 文件上传 实现word PPT Excel PDF TXT等文件导入

安装  

0 在终端内切换到你的laravel项目根目录,执行composer require peinhu/aetherupload-laravel ~1.0  

1 (Laravel 5.5请跳过)在config/app.php的providers数组中添加一行
AetherUpload\AetherUploadServiceProvider::class,

2 执行php artisan aetherupload:publish来发布一些文件和目录

3 赋予上传目录相应权限,在项目根目录下,执行chmod -R 755 storage/app/aetherupload

4 在浏览器访问http://域名/aetherupload可到达示例页面

提示:更改相关配置选项请编辑config/aetherupload.php。

注意两个地方:当多人协同办公的时候需要从新执行0和2步骤

当你的网站路径不是根路径时需要修改js下面的aetherupload.js下面的aetherupload/uploading(两处)

$.ajax({
    //上传文件时注意路径,如果是更目录则去掉   /项目名称/public
    url: "/项目名称/public/aetherupload/uploading",

    type: "POST",

基本用法  

文件上传:参考示例文件注释的部分,在需要上传大文件的页面引入相应文件和代码。
可使用自定义中间件来对文件上传进行额外过滤,还可使用上传完成事件对上传的文件进一步处理。

分组配置:在配置文件的GROUPS下新增分组,运行php artisan aetherupload:groups自动创建对应目录。

自定义中间件:参考laravel文档中间件部分,创建你的中间件并在Kernel.php中注册,
将你注册的中间件名称填入配置文件对应部分,如['middleware1','middleware2']。  

上传完成事件:分为上传完成前和上传完成后事件,参考laravel文档事件系统部分,
在EventServiceProvider中注册你的事件和监听器,运行php artisan event:generate生成事件和监听器,
将你注册的事件完整类名填入配置文件对应部分,如'App\Events\OrderShipped'。

添加秒传功能(需Redis及浏览器支持)

安装Redis并启动服务端。安装predis包composer require predis/predis,
在.env文件中配置Redis的相关参数。确保上传页面引入了spark-md5.min.js文件。

提示:在Redis中维护了一份与实际资源文件对应的hash清单,
文件的md5哈希值为资源文件的唯一标识符,实际资源文件的增删造成的变化均需要同步到hash清单中,
否则会产生脏数据,扩展包已包含新增部分,删除(deleteOneHash)则需要使用者自行调用相关方法处理,
详情参考RedisHandler类。  

使用方便的artisan命令

php artisan aetherupload:groups 列出所有分组并自动创建对应目录
php artisan aetherupload:build 在Redis中重建资源文件的hash清单
php artisan aetherupload:clean 清除几天前的无效临时文件
php artisan aetherupload:publish vendor:publish的简化命令,覆盖发布一些目录和文件

优化建议

(推荐)设置每天自动清除无效的临时文件。
由于上传流程存在意外终止的情况,如在传输过程中强行关闭页面或浏览器,
将会导致已产生的文件部分成为无效文件,占据大量的存储空间,
我们可以使用Laravel的任务调度功能来定期清除它们。
在Linux中运行crontab -e命令,确保文件中包含这行代码:
* * * * * php /项目根目录的绝对路径/artisan schedule:run 1>> /dev/null 2>&1
在app/Console/Kernel.php中的schedule方法中添加以下代码:
  $schedule->call(function () {
      \AetherUpload\ResourceHandler::cleanUpDir();
  })->daily();
设置每天自动重建Redis中的hash清单。
不恰当的处理和某些极端情况可能使hash清单中出现脏数据,从而影响到秒传功能的准确性,
重建hash清单可消除脏数据,恢复与实际资源文件的同步。
在Linux中运行crontab -e命令,确保文件中包含这行代码:
* * * * * php /项目根目录的绝对路径/artisan schedule:run 1>> /dev/null 2>&1
在app/Console/Kernel.php中的schedule方法中添加以下代码:
  $schedule->call(function () {
      \AetherUpload\RedisHandler::build();
  })->daily();
提高临时文件读写速度。
利用Linux的tmpfs文件系统,来达到将临时文件放到内存中快速读写的目的。执行以下命令:
mkdir /dev/shm/tmp
chmod 1777 /dev/shm/tmp
mount --bind /dev/shm/tmp /tmp

相关文章更多 >

© 2024版权所有 水水网

电话:171780793