标签:文件相关 http model 记录 client 因此 实例化 导入文件数据 文件
安装 composer require maatwebsite/excel 注意3.0与2.0几乎完全不同的,文档也不同 3.1文档: https://laravel-excel.maatwebsite.nl/3.1/getting-started/ 1.导出 推荐导出文档: https://blog.csdn.net/beyond__devil/article/details/83008782 https://blog.csdn.net/u010324331/article/details/83658747 构造类 use App\Extensions\myapp\Models\Goods; //商品model use Maatwebsite\Excel\Concerns\FromCollection; //excel表单字段集 必备 use Maatwebsite\Excel\Concerns\WithHeadings; //excel标题行 class GoodsExport implements FromCollection, WithHeadings { public function __construct($post) { $this->post = []; if(is_array($post) && count($post)>0) { $this->post = $post; } } public function collection() { // return Goods::select(‘goods_name‘,‘price‘,‘stock‘)->get();// 查询数据直接返回 } public function headings(): array { //表格列头标题 WithHeadings return array( ‘商品名‘, ‘售价‘, ‘库存‘); } } 调用 实例化的时候可以通过构造函数传递参数, 用于数据库查询 use Excel; use App\Extensions\myapp\Controllers\Admin\Excel\GoodsExport; public function exportGoods(Request $request) { return Excel::download(new GoodsExport($request->all()), ‘商品导出表.xlsx‘); } 2.导入 // 注意导入文件数据量可能过大,因此最好通过队列执行,每次导入一部分,通过标记跳过已导入的部分 构造类 use Maatwebsite\Excel\Concerns\ToCollection; use Illuminate\Support\Collection; use App\Extensions\myapp\Jobs\ProductImportQueue; // 队列 use App\Extensions\myapp\Models\Product; class ProductImport implements ToCollection { public $path; public function __construct($path) { $this->path = $path; } public function collection(Collection $rows) { // 缓存读取已导入数量 // 循环导入100条 // 若未导入完成,记录缓存,并重新创建队列 (或者重新执行队列?) // dispatch(new ProductImportQueue($this->path)); } } 调用 use Illuminate\Support\Facades\Storage; use App\Extensions\myapp\Controllers\Admin\Excel\ProductImport; use Excel; public function importProduct(Request $request) { $file = $request->file(‘goods_excel‘); // 通过laravel的request获取文件 if ($file && $file->isValid()) { // 获取文件相关信息 $originalName = $file->getClientOriginalName(); // 文件原名 $ext = $file->getClientOriginalExtension(); // 扩展名 // $realPath = $file->getRealPath(); //临时文件的绝对路径 // $type = $file->getClientMimeType(); // image/jpeg if($ext!=‘xlsx‘ && $ext!=‘xls‘){ return $this->responseAjax(‘fail‘,‘请上传excel文件‘); } $filename = $originalName; if(Storage::disk(‘public‘)->exists(‘uploads/‘.$filename)) { return $this->responseAjax(‘fail‘,‘文件已上传‘); } // 上传文件 存于服务器 Storage::disk(‘public‘)->makeDirectory(‘uploads‘); Storage::disk(‘public‘)->putFileAs(‘uploads‘,$file,$filename); //执行同步 $path = ‘public/uploads/‘.$filename; Excel::import(new ProductImport($path), $path); // use App\Extensions\myapp\Jobs\ProductImportQueue; // dispatch(new ProductImportQueue($path)); 加入队列 } }
标签:文件相关 http model 记录 client 因此 实例化 导入文件数据 文件
原文地址:https://www.cnblogs.com/mengwangchuan/p/10441801.html