放牧代码和思想
专注自然语言处理、机器学习算法
    This thing called love. Know I would've. Thrown it all away. Wouldn't hesitate.

再谈BAE上传文件的临时路径Bug

上次写了一篇关于sys_get_temp_dir()实现错误,觉得写得不够,这次来举例说明使用自有域名访问BaeApp时导致的文件上传失败现象以及解决方案。

首先搭建一个测试demo:

<html>
<body>

<form action="index.php" method="post"
      enctype="multipart/form-data">
    <label for="file">Filename:</label>
    <input type="file" name="file" id="file" />
    <br />
    <input type="submit" name="submit" value="Submit" />
</form>

</body>
</html>

<?php
include_once './krumo/class.krumo.php';
krumo($_FILES);

非常简单的一个文件上传页面,现在我们使用http://baesdkdemo.duapp.com/来访问它(我是Chrome用户,Chrome界面上的隐私太多不方便截图就临时用IE了),并且上传一个文件试试看:

非常好,上传成功了,可以看到临时路径和文件大小,错误码为0,也就是没有错误define ('UPLOAD_ERR_OK', 0);

下面给应用绑定一个自有域名demo.hankcs.com,并且上传相同的文件试试看:

出错了,错误码是6,也就是define ('UPLOAD_ERR_NO_TMP_DIR', 6);没有临时目录。说明什么?BAE的临时目录机制根本就是坑人用的,为什么不给其他域名的访问请求设置临时目录?这不就等于说自有域名的应用无法上传文件了吗?

其实我想出了一条“妙计”,那就是将post地址硬编码为duapp.com,也就是修改一句<form action="http://baesdkdemo.duapp.com/index.php" method="post"

之后就可以上传了,不过请注意浏览框的地址变成了baesdkdemo.duapp.com:

这跟第一张图可不一样,这是经由demo.hankcs.com跳转过去的,变相实现了自有域名的上传文件。

BAE可真是粗糙呀,这一刻我有了抛弃BAE转到SAE的想法,如果来访的朋友有什么好的意见欢迎留言。

知识共享许可协议 知识共享署名-非商业性使用-相同方式共享码农场 » 再谈BAE上传文件的临时路径Bug

我的作品

HanLP自然语言处理包《自然语言处理入门》