导入EXCEL
<input type="file" id="inputExcel" style="display: none" accept=".xlsx, .xls" data-url="{{url(strtolower($model).'/import')}}">
<button type="reset" class="layui-btn layui-btn-warm" id="import_csv"><i class="layui-icon layui-icon-upload-circle layuiadmin-button-btn"></i>导入</button>
$(document).on('click', '#import_csv', function () {
$('#inputExcel').click();
});
$('#inputExcel').on('change', function (e) {
console.log(e);
var file = this.files[0];
var formData = new FormData();
formData.append('file', file);
var url = $(this).data('url');
$.ajax({
url: url,
data: formData,
type: 'POST',
contentType: false,
processData: false,
dataType: 'json',
cache: false,
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
success: function (res) {
history.go(0);
alert(res.msg);
},
error: function (err) {
console.error('Upload error:', err);
}
});
})
- 导入的方法封装在了
Services
,采取注入的方式来实例调用,这里只演示导入
<?php
namespace App\Services;
use App\Models\Test;
use Illuminate\Http\Request;
use PhpOffice\PhpSpreadsheet\IOFactory;
use Illuminate\Support\Facades\DB;
class TestService
{
public static function import(Request $request)
{
if ($request->isMethod('post') && $request->hasFile('file')) {
$fileName = md5(microtime(true) . mt_rand(1000, 9999)) . '.xlsx';
$root = storage_path('/public/uploads/');
$savePath = 'importExcel/' . date('Ymd') . '/';
$path = $root . $savePath;
if (!is_dir($path)) {
if (false === @mkdir($path, 0777, true) && !is_dir($path)) {
throw new \Exception('存储文件夹创建失败:' . $path);
}
}
$filePath = $path . $fileName;
if ($request->file('file')->move($path, $fileName)) {
$spreadsheet = IOFactory::load($filePath);
$worksheet = $spreadsheet->getActiveSheet()->toArray(null, true, true, true);
DB::beginTransaction();
try {
foreach ($worksheet as $key => $value) {
if ($key == 1) continue;
if (empty($value['A'])) continue;
$model = new Test;
$model['name'] = $value['A'];
$model->saveOrFail([
'timestamps' => false,
]);
}
DB::commit();
return response()->json(['code' => 0, 'msg' => '文件上传成功']);
} catch (\Exception $e) {
DB::rollBack();
return response()->json(['code' => 1, 'msg' => $e->getMessage()]);
}
} else {
return response()->json(['code' => 1, 'msg' => '文件上传失败']);
}
} else {
return response()->json(['code' => $request, 'msg' => 'Error!']);
}
}
}
<?php
namespace App\Http\Controllers\Admin;
use App\Helpers\Common;
use App\Models\Test;
use App\Services\TestService;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class TestController extends BaseController
{
protected $testService;
public function __construct(TestService $testService)
{
$this->testService = $testService;
}
public function import(Request $request)
{
return $this->testService->import($request);
}
}