为什么PhpSpreadsheet无法在public://中识别我的Xlsx文件?

时间:2019-01-30 20:49:43

标签: drupal-8 phpspreadsheet

我正在研究一个Drupal模块,该模块导入Xlsx文件并将行插入数据库。一切正常,除了当我上传的文件位于"PHP message: Uncaught PHP Exception InvalidArgumentException: "File "" does not exist." at File.php line 137"中时,PhpSpreadsheet引发错误public。当文件位于base_path()中时,不会发生此错误。第137行抛出一个异常,说它不是文件,但是\dpm(is_file($uri))返回TRUE。为什么会这样呢?下面是我的代码:

public function submitForm(array &$form, FormStateInterface $form_state) {
    $connection = \Drupal::database();
    $fid = $form_state->getValue("xlsx_upload");
    $input = File::load(reset($fid));
    $input->setPermanent();
    $uri = \Drupal::service('file_system')->realpath($input->getFileUri());
    //$uri = '/home/joe/file.xslx'; <--- this works perfectly.
    $reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReaderForFile($uri);
    $spreadsheet = $reader->load($filename);
    $dataArray = $spreadsheet->getActiveSheet()->toArray();
    $connection->truncate("mitacan")->execute();
    $connection->query("SET NAMES utf8");
    foreach ($dataArray as $dataItem) {
      $connection->insert('mitacan')
      ->fields([
        'stokkodu'      => $dataItem[0],
        'logo'          => $dataItem[1],
        'resim1'        => $dataItem[2],
        'grupkodu'      => $dataItem[3],
        'grupadi'       => $dataItem[4],
        'grupindex'     => $dataItem[5],
        'paketadedi'    => $dataItem[6],
      ])
      ->execute();
    }
    drupal_set_message('Excel verisi veritabanına eklendi.');
  }

1 个答案:

答案 0 :(得分:0)

$spreadsheet = $reader->load($filename);

$ filename未定义。请改用$ uri。