我遇到了GAE和GCS的问题。
我正在尝试上传一个有效的文件 - 但如果文件已经存在,我似乎无法停止上传。它只是一个随机的临时名称。
我有这段代码,但它没有完成这项工作。
<?php
require_once 'google/appengine/api/cloud_storage/CloudStorageTools.php';
use google\appengine\api\cloud_storage\CloudStorageTools;
SESSION_START();
$gs_new_name = $_FILES["uploaded_files"]['name'];
$image = CloudStorageTools::getPublicUrl("gs://bucket/".$gs_new_name, true);
if(getimagesize($image) !== FALSE){
$gs_name = $_FILES["uploaded_files"]['tmp_name'];
move_uploaded_file($gs_name, "gs://bucket/".$gs_new_name);
} else{
die();
}
?>
答案 0 :(得分:1)
可以停止通过PHP上传到GCS。通过CloudStorageTools::createUploadUrl()
直接上传到GCS时,整个HTTP请求将发送到处理上传的GCS代理,然后将请求转发回App Engine应用程序。那时PHP将GCS上传文件的位置添加到$_FILES
数组。因此,执行die()
的当前方法不起作用,因为在执行脚本之前已经执行了整个上载。
没有检查客户端(通过JavaScript)的特定文件名/扩展名(很多主题)我不知道你会怎么做这样的事情。我也不完全确定你想要完成什么。您只是想将文件限制为图像类型吗?如果这样检查客户端的扩展,然后执行类似于你的扩展应该做的伎俩。只有调用die()
而不是调用unlink($gs_name)
才能删除临时文件。