PHPExcel操作sae的storage上的文件

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

文件的操作被拒绝。

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

具体解决可以如下:

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

如上。

我对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文件的存储路径,文档里说的是整个元素级的处理。

只有一句:

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

既然如此,我就先上传文件来试试呗。域和文件结构已建好。代码参考: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

可以看到返回的地址是:http://dutcircle-files.stor.sinaapp.com/Files/实验.png

在应用管理里也可以看到文件是已经上传好了的。

再尝试打开下:

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

可以看到,可以通过这个url来获取文件。

但是,直接把这个url用来操作excel

 1 $objExcel=newPHPExcel();
 2 
 3 $storage=newSaeStorage();
 4 
 5 $domain='files';
 6 
 7 $dest='Files/info.xls';
 8 
 9 $url=$storage->getUrl($domain,$dest);
10 
11 $file_name=$url;
12 
13 //http://dutcircle-files.stor.sinaapp.com/Files/info.xls
14 
15 $file_name='saestor://files/Files/info.xls';
16 
17 $objPHPExcel=PHPExcel_IOFactory::load($file_name);
View Code

是不对的,会报错,找不到这个文件。

所以得换个方法,http://saebbs.com/forum.php?mod=viewthread&tid=9456

虽然提的问题和我不一样,但人家已经解决了我的问题。

修改代码,至此,大功告成。

原文地址:https://www.cnblogs.com/jacean/p/5041118.html