zoukankan      html  css  js  c++  java
  • 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

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

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

  • 相关阅读:
    Leetcode: Insert Delete GetRandom O(1)
    Leetcode: Kth Smallest Element in a Sorted Matrix
    Leetcode: Combination Sum IV && Summary: The Key to Solve DP
    Leetcode: Wiggle Subsequence
    Leetcode: Guess Number Higher or Lower II
    Leetcode: Guess Number Higher or Lower
    Leetcode: Find K Pairs with Smallest Sums
    Leetcode: Super Pow
    Leetcode: Largest Divisible Subset
    Leetcode: Water and Jug Problem && Summary: GCD求法(辗转相除法 or Euclidean algorithm)
  • 原文地址:https://www.cnblogs.com/jacean/p/5041118.html
Copyright © 2011-2022 走看看