PHPExcel操作sae的storage上的文件
在用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上的文件的更多相关文章
- SAE利用storge上传文件 - myskies的专栏 - 博客频道 - CSDN.NET
SAE利用storge上传文件 - myskies的专栏 - 博客频道 - CSDN.NET SAE利用storge上传文件
- Go连接到Linux服务器进行操作-执行shell命令&&上传文件
Go连接到Linux服务器进行操作 使用密码连接Linux服务器 package main import ( "fmt" "golang.org/x/crypto/ssh ...
- Python脚本控制的WebDriver 常用操作 <二十六> 上传文件
测试用例场景 上传文件的方法是找到上传文件的对象,通常是的对象.然后直接往这个对象send_keys,传入需要上传文件的正确路径.绝对路径和相对路径都可以,但是上传的文件必须存在,否则会报错. Pyt ...
- hadoop的hdfs文件操作实现上传文件到hdfs
这篇文章主要介绍了使用hadoop的API对HDFS上的文件访问,其中包括上传文件到HDFS上.从HDFS上下载文件和删除HDFS上的文件,需要的朋友可以参考下hdfs文件操作操作示例,包括上传文件到 ...
- hadoop的API对HDFS上的文件访问
这篇文章主要介绍了使用hadoop的API对HDFS上的文件访问,其中包括上传文件到HDFS上.从HDFS上下载文件和删除HDFS上的文件,需要的朋友可以参考下hdfs文件操作操作示例,包括上传文件到 ...
- Ui自动化测试上传文件方法都在这里了
前言 实施UI自动化测试的时候,经常会遇见上传文件的操作,那么对于上传文件你知道几种方法呢?今天我们就总结一下几种常用的上传文件的方法,并分析一下每个方法的优点和缺点以及哪种方法效率,稳定性更高 被测 ...
- SAE上传文件到storage
还有什么比代码更清晰的讲解 html代码: 一定需要下面这个: method="post" enctype="multipart/form-data" < ...
- 【Azure Developer】VS Code运行Java 版Azure Storage SDK操作Blob (新建Container, 上传Blob文件,下载及清理)
问题描述 是否可以用Java代码来管理Azure blob? 可以.在代码中加入azure-storage-blob依赖.即可使用以下类操作Azure Storage Blob. BlobServic ...
- Sae 上传文件到Storage
首先说一下几个地方: 1.上传使用ss.upload("domin域名","源地址","目标地址,也就是storage的地址");假设要上传 ...
随机推荐
- .NET 文件相关的所有操作
public static class FileSystemHelper { #region 检测指定目录是否存在 /// <summary> /// 检测指定目录是否存在 /// < ...
- [Java] 字符流Reader,读取字符数据
package test.stream; import java.io.BufferedReader; import java.io.FileNotFoundException; import jav ...
- sikuli常用方法学习
Screen s = new Screen(); 1.在文本框中填入文本 以下两个方法都可以 type是用来在文本框中输入指定的文本 paste是用来在文本框中复制指定的文本 s.type(imgpa ...
- inno setup 在卸载时如果想保留文件 使用uninsneveruninstall
一般来说,inno只卸载你安装的文件,自动生成如Thumb.db(缩略图)等文件,卸载程序是不会删除这些的,此时你希望整个安装目录删除则可用你说的方法删除.若想保留某些文件,则必须在[File]段中拷 ...
- VisualVM连接远程Java进程
jstatd是一个RMI(Remove Method Invocation)的server应用,用于监控jvm的创建和结束,并且提供接口让监控工具(如VisualVM)可以远程连接到本机的jvms . ...
- 使用hive访问elasticsearch的数据
使用hive访问elasticsearch的数据 1.配置 将elasticsearch-hadoop-2.1.1.jar拷贝到hive/lib hive -hiveconf hive.aux.jar ...
- X230上安装Yosemite/Win7-黑苹果之路
以前曾经在X230上安装了mavericks,但因为无线网卡问题最终作罢,现在换了SSD(128G).AR9285网卡,又冲刺了一把OSX,折腾了好几天,终于成了.特做记录如下: 首先,硬盘分区问题, ...
- 中南大学第一届长沙地区程序设计邀请赛 To Add Which?
1350: To Add Which? Time Limit: 1 Sec Memory Limit: 128 MB Description There is an integer sequence ...
- Oracle VM VirtualBox 安装笔记
[CentOS 6] 1.在官网下载VirtualBox-4.2-4.2.16_86992_el6-1.x86_64.rpm安装. 2.YUM安装kernel-devel包. 3.把用户加入vboxu ...
- 【caffe-windows】 caffe-master 之 mnist 超详细
本教程尽量详细,大多步骤都有图,如果运行出错,请先对照自己的文件是否和图上的一样,包括标点啊,空格啊,斜杠,反斜杠啊之类的小细节. 第一步: 官网下载mnist数据 http://yann.lec ...