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

文件的操作被拒绝。

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

具体解决可以如下:

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

如上。

我对excel的操作代码如下:

 $file_name="Files/info.xls";

 $objPHPExcel=PHPExcel_IOFactory::load($file_name);

 $objPHPExcel->setActiveSheetIndex(0);

 $row=$objPHPExcel->getActiveSheet()->getHighestRow()+1;

 $objPHPExcel->getActiveSheet()->SetCellValue('A'.$row,$_POST['inputName']);

 $objPHPExcel->getActiveSheet()->SetCellValue('B'.$row,$_POST['inputClass']);

 $objPHPExcel->getActiveSheet()->SetCellValue('C'.$row,$_POST['inputEmail']);

 $objPHPExcel->getActiveSheet()->SetCellValue('D'.$row,$_POST['inputJob']);

 $objPHPExcel->getActiveSheet()->SetCellValue('E'.$row,$_POST['inputTel']);

 $objWriter=newPHPExcel_Writer_Excel5($objPHPExcel);

 $objWriter->save($file_name);

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

修改之后的代码如下;

 $file_name='saestor://files/Files/info.xls';

 $objPHPExcel=PHPExcel_IOFactory::load($file_name);

 $objPHPExcel->setActiveSheetIndex(0);

 $row=$objPHPExcel->getActiveSheet()->getHighestRow()+1;

 $objPHPExcel->getActiveSheet()->SetCellValue('A'.$row,$_POST['inputName']);

 $objPHPExcel->getActiveSheet()->SetCellValue('B'.$row,$_POST['inputClass']);

 $objPHPExcel->getActiveSheet()->SetCellValue('C'.$row,$_POST['inputEmail']);

 $objPHPExcel->getActiveSheet()->SetCellValue('D'.$row,$_POST['inputJob']);

 $objPHPExcel->getActiveSheet()->SetCellValue('E'.$row,$_POST['inputTel']);

 $objWriter=newPHPExcel_Writer_Excel5($objPHPExcel);

 $objWriter->save($file_name);

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

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

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

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

只有一句:

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

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

上传文件代码如下:

 <metacharset="UTF-8"/>

 <formaction=""method="post"enctype="multipart/form-data">

 <inputtype="file"name="file"/>

 <inputtype="submit"/>

 </form>

 <?php

 if($_FILES['file']!='')

 {

 $storage=newSaeStorage();

 $domain='files';

 $dest='Files/'.$_FILES['file']['name'];

 $src=$_FILES["file"]["tmp_name"];

 $storage->upload($domain,$dest,$src);

 $url=$storage->getUrl($domain,$dest);

 echo"网址:$url<br/><imgsrc='$url'/>";

 }

 ?>

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

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

再尝试打开下:

 <metacharset="UTF-8"/>

 <formaction=""method="post">

 <inputtype="text"name="text"/>

 <inputtype="submit"/>

 </form>

 <?php

 if($_POST['text']!='')

 {

 $storage=newSaeStorage();

 $domain='files';

 $dest='Files/'.$_POST['text'];

 $url=$storage->getUrl($domain,$dest);

 echo"网址:$url<br/><imgsrc='$url'/>";

 }

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

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

 $objExcel=newPHPExcel();

 $storage=newSaeStorage();

 $domain='files';

 $dest='Files/info.xls';

 $url=$storage->getUrl($domain,$dest);

 $file_name=$url;

 //http://dutcircle-files.stor.sinaapp.com/Files/info.xls

 $file_name='saestor://files/Files/info.xls';

 $objPHPExcel=PHPExcel_IOFactory::load($file_name);

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

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

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

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

PHPExcel操作sae的storage上的文件的更多相关文章

  1. SAE利用storge上传文件 - myskies的专栏 - 博客频道 - CSDN.NET

    SAE利用storge上传文件 - myskies的专栏 - 博客频道 - CSDN.NET SAE利用storge上传文件

  2. Go连接到Linux服务器进行操作-执行shell命令&&上传文件

    Go连接到Linux服务器进行操作 使用密码连接Linux服务器 package main import ( "fmt" "golang.org/x/crypto/ssh ...

  3. Python脚本控制的WebDriver 常用操作 <二十六> 上传文件

    测试用例场景 上传文件的方法是找到上传文件的对象,通常是的对象.然后直接往这个对象send_keys,传入需要上传文件的正确路径.绝对路径和相对路径都可以,但是上传的文件必须存在,否则会报错. Pyt ...

  4. hadoop的hdfs文件操作实现上传文件到hdfs

    这篇文章主要介绍了使用hadoop的API对HDFS上的文件访问,其中包括上传文件到HDFS上.从HDFS上下载文件和删除HDFS上的文件,需要的朋友可以参考下hdfs文件操作操作示例,包括上传文件到 ...

  5. hadoop的API对HDFS上的文件访问

    这篇文章主要介绍了使用hadoop的API对HDFS上的文件访问,其中包括上传文件到HDFS上.从HDFS上下载文件和删除HDFS上的文件,需要的朋友可以参考下hdfs文件操作操作示例,包括上传文件到 ...

  6. Ui自动化测试上传文件方法都在这里了

    前言 实施UI自动化测试的时候,经常会遇见上传文件的操作,那么对于上传文件你知道几种方法呢?今天我们就总结一下几种常用的上传文件的方法,并分析一下每个方法的优点和缺点以及哪种方法效率,稳定性更高 被测 ...

  7. SAE上传文件到storage

    还有什么比代码更清晰的讲解 html代码: 一定需要下面这个: method="post" enctype="multipart/form-data" < ...

  8. 【Azure Developer】VS Code运行Java 版Azure Storage SDK操作Blob (新建Container, 上传Blob文件,下载及清理)

    问题描述 是否可以用Java代码来管理Azure blob? 可以.在代码中加入azure-storage-blob依赖.即可使用以下类操作Azure Storage Blob. BlobServic ...

  9. Sae 上传文件到Storage

    首先说一下几个地方: 1.上传使用ss.upload("domin域名","源地址","目标地址,也就是storage的地址");假设要上传 ...

随机推荐

  1. DIV+CSS滑动门效果

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. [SQL]当输入表达式得数为一个有效的整数、浮点数、money 或 decimal 类型,那么 ISNUMERIC 返回 1;否则返回 0

    ISNUMERIC ( expression ) 当输入表达式得数为一个有效的整数.浮点数.money 或 :否则返回 .返回值为 确保可以将 expression 转换为上述数字类型中的一种. 注意 ...

  3. iOS 进入后台的处理

    当App进入后台时(按下Home键), App会被系统暂停, 所有的程序逻辑都会停止, App还是驻留内存中, 除非被用户强制退出, 或者被系统kill掉(为了保证正在前台运行的App有足够的内存, ...

  4. Appium技术点之解决屏幕无法点击的情况————Python版本

    1.导入包: from appium.webdriver.common.touch_action import TouchAction 2.写代码 TouchAction(driver).pop(x= ...

  5. JavaScript对象的创建之使用json格式定义

    json: javascript simple object notation. json就是js的对象,但是它省去了xml中的标签,而是通过{}来完成对象的说明. 定义对象 var person = ...

  6. 使用pscp实现Windows 和 Linux服务器间远程拷贝文件

    转自:http://www.linuxidc.com/Linux/2012-05/60966.htm 在工作中,每次部署应用时都需要从本机Windows服务器拷贝文件到Linux上,有时还将Linux ...

  7. 如何激活phpstorm | phpstorm的下载

    2016年7月14日 phpsotrm 推送2016.2 更新 phpstorm的下载地址 https://www.jetbrains.com/phpstorm/download/#section=w ...

  8. Flex 仿Winxp左侧菜单

    呆毛放出,源码暂时不能公布,一直比较喜欢winxp的左侧菜单样式,以前也用xslt实现过,但总是达不到完美,没想到FLex轻松做到了这一点,几乎和winxp一模一样.

  9. Weblogic发布小问题——The root element weblogic-web-app is missing in the descriptor file

    前几天发布项目遇到这样一个小错误,在此记录一下,以便加深一点印象,下次好解决类似的问题! (对应的应用服务器是WebLogic Server 版本: 10.3.6.0,应用是以文件夹的形式发在服务器的 ...

  10. Android学习笔记之AndroidManifest.xml文件解析

    一.关于AndroidManifest.xml AndroidManifest.xml 是每个android程序中必须的文件.它位于整个项目的根目录,描述了package中暴露的组件(activiti ...