laravel-execl 导入图片问题

laravel-execl 导入操作 怎么导入图片。

laravel-execl 导入图片问题
中展示了添加了浮动的图片。laravel-execl 一直获取不到是空

laravel-execl 导入图片问题

然后换了一种方法

使用PhpSpreadsheet 获取excel中的图片,转成二进制流, 然后在写进表格中

现在是图片流太长,execl 表格,保存不完整(表格好像最大只能存储32000字符)超出长度了。 有大佬有处理方法了。 指导一下。

或者有其他好用的execl处理插件,能导入图片。 验证 推荐一下

:scream: :scream:

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 4
随波逐流

分两步,第一步先上传数据,第二部再更新图片

1年前 评论
laravel176 (楼主) 1年前

楼主,怎么解决的,我也遇到了这个问题

1年前 评论

@ltw_phper 我最近遇到同样的需求,前期设计实现方案时写了一个 demo,有些细节还待完善,仅供参考。

<?php

...

public function import(string $file_path)
{
    $list = [];
    Excel::selectSheetsByIndex(0)->load(
        $file_path,
        function ($reader) use (&$list) {
            $list = $this->appendImageForSheetData(
                $reader->getSheet(0),
                $reader->get()->toArray(),
                '商品图片'
            );
        }
    );

    ...
}

...

/**
 * 为 excel 工作表数据集追加图片列
 *
 * @param PHPExcel_Worksheet $excel_worksheet
 * @param array $sheet_data
 * @param string $image_column_name
 * @param string|null $save_dir
 *
 * @return array
 */
protected function appendImageForSheetData(
    PHPExcel_Worksheet $excel_worksheet,
    array $sheet_data,
    string $image_column_name,
    string $save_dir = null
): array {
    $save_dir = $save_dir ?? 'excel_image/' . date('Ymd') . '/' ;

    //从 excel 读取器中读取图片集合,依次循环每张图片,将其保存到磁盘后,再把图片保存路径追加到 excel 数据集中
    foreach ($excel_worksheet->getDrawingCollection() as $drawing) {
        if (!$drawing instanceof PHPExcel_Worksheet_Drawing) {
            continue;
        }

        //确定图片所在的行号
        preg_match('/\d+$/', $drawing->getCoordinates(), $row);
        $row = ($row[0] ?? 0) - 2;
        if (!isset($sheet_data[$row])) {
            continue;
        }

        //获取图片资源并保存到磁盘
        $file_name = Str::random(32). '.'. $drawing->getExtension();
        $file_save_path = $save_dir . $file_name;
        if (!Storage::disk('local')
                    ->put(
                        $file_save_path,
                        file_get_contents($drawing->getPath())
                    )
        ) {
            continue;
        }

        //将图片路径追加到 excel sheet 数据集
        $sheet_data[$row][$image_column_name] = $file_save_path;
    }

    return $sheet_data;
}
1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!