在用PHPexcel操作excel的时候,在本地是好使的,但是把代码部署到sae就不好使了。会遇到如下问题:

PHPExcel操作sae的storage上的文件

文件的操作被拒绝。

这个原因就是sae上的应用文件是不允许改动的。sae提供的文件方案是使用storage,所以可以把文件存储在storage来进行操作。

具体解决可以如下:

我在sae应用里新建一个domainfiles(这个名字必须是小写字母或数字,如果是大写字母的话虽然可以在Cyberduck上新建成功,在domain管理里看到,但是是无效的domain)。在这个files下新建文件夹Files,然后把要操作的excel上传。

PHPExcel操作sae的storage上的文件

 

PHPExcel操作sae的storage上的文件

如上。

我对excel的操作代码如下:

 1 $file_name="Files/info.xls";
 2 
 3 $objPHPExcel=PHPExcel_IOFactory::load($file_name);
 4 
 5 $objPHPExcel->setActiveSheetIndex(0);
 6 
 7 $row=$objPHPExcel->getActiveSheet()->getHighestRow()+1;
 8 
 9 $objPHPExcel->getActiveSheet()->SetCellValue('A'.$row,$_POST['inputName']);
10 
11 $objPHPExcel->getActiveSheet()->SetCellValue('B'.$row,$_POST['inputClass']);
12 
13 $objPHPExcel->getActiveSheet()->SetCellValue('C'.$row,$_POST['inputEmail']);
14 
15 $objPHPExcel->getActiveSheet()->SetCellValue('D'.$row,$_POST['inputJob']);
16 
17 $objPHPExcel->getActiveSheet()->SetCellValue('E'.$row,$_POST['inputTel']);
18 
19 $objWriter=newPHPExcel_Writer_Excel5($objPHPExcel);
20 
21 $objWriter->save($file_name);

 

执行的是在info.xls的末尾添加一行。

修改之后的代码如下;

 1 $file_name='saestor://files/Files/info.xls';
 2 
 3 $objPHPExcel=PHPExcel_IOFactory::load($file_name);
 4 
 5 $objPHPExcel->setActiveSheetIndex(0);
 6 
 7 $row=$objPHPExcel->getActiveSheet()->getHighestRow()+1;
 8 
 9 $objPHPExcel->getActiveSheet()->SetCellValue('A'.$row,$_POST['inputName']);
10 
11 $objPHPExcel->getActiveSheet()->SetCellValue('B'.$row,$_POST['inputClass']);
12 
13 $objPHPExcel->getActiveSheet()->SetCellValue('C'.$row,$_POST['inputEmail']);
14 
15 $objPHPExcel->getActiveSheet()->SetCellValue('D'.$row,$_POST['inputJob']);
16 
17 $objPHPExcel->getActiveSheet()->SetCellValue('E'.$row,$_POST['inputTel']);
18 
19 $objWriter=newPHPExcel_Writer_Excel5($objPHPExcel);
20 
21 $objWriter->save($file_name);

 

可以看到,修改的只是文件路径。然后操作就完全没有问题了。

问题解决了,接下来我要扯扯怎么找到的办法。

刚开始说要用storage,好,我就去sae官网看storage文档,结果,说的什么鬼,没有收获。

毕竟我要找的重点是storage文件的存储路径,文档里说的是整个元素级的处理。

只有一句:

PHPExcel操作sae的storage上的文件

这个还是在介绍文档里说的。

既然如此,我就先上传文件来试试呗。域和文件结构已建好。代码参考:http://cloudbbs.org/forum.php?mod=viewthread&tid=23708里的7楼作者回答。

上传文件代码如下:

 1 <metacharset="UTF-8"/>
 2 
 3 <formaction=""method="post"enctype="multipart/form-data">
 4 
 5 <inputtype="file"name="file"/>
 6 
 7 <inputtype="submit"/>
 8 
 9 </form>
10 
11 <?php
12 
13 if($_FILES['file']!='')
14 
15 {
16 
17 $storage=newSaeStorage();
18 
19 $domain='files';
20 
21 $dest='Files/'.$_FILES['file']['name'];
22 
23 $src=$_FILES["file"]["tmp_name"];
24 
25 $storage->upload($domain,$dest,$src);
26 
27 $url=$storage->getUrl($domain,$dest);
28 
29 echo"网址:$url<br/><imgsrc='$url'/>";
30 
31 }
32  
33 
34 ?>
View Code

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-12-10
  • 2021-05-18
  • 2021-07-11
  • 2022-12-23
  • 2021-10-11
  • 2021-09-14
猜你喜欢
  • 2022-02-19
  • 2022-12-23
  • 2021-11-26
  • 2021-11-27
  • 2021-08-21
  • 2022-02-12
  • 2022-02-22
相关资源
相似解决方案