使用AJAX发送的PHP应用程序引擎将$u文件[“file”][“tmp”u名称]上载到云存储
我正在尝试使用使用AJAX发送的PHP应用程序引擎将$u文件[“file”][“tmp”u名称]上载到云存储,php,ajax,google-app-engine,google-cloud-storage,Php,Ajax,Google App Engine,Google Cloud Storage,我正在尝试使用云库将文件上载到云存储,发现问题是$\u文件[“文件”][“tmp\u名称”]。通常我会在普通服务器中使用移动上传的文件($\u FILES[“file”][“tmp\u name”],$new\u file\u name),但在appengine中,这是不可能的,您需要使用此功能上传到云存储 require __DIR__ . '/../../vendor/autoload.php'; use Google\Cloud\Storage\StorageClient; functio
云库
将文件上载到云存储,发现问题是$\u文件[“文件”][“tmp\u名称”]
。通常我会在普通服务器中使用移动上传的文件($\u FILES[“file”][“tmp\u name”],$new\u file\u name)
,但在appengine中,这是不可能的,您需要使用此功能上传到云存储
require __DIR__ . '/../../vendor/autoload.php';
use Google\Cloud\Storage\StorageClient;
function upload_object($bucketName, $objectName, $source) {
$storage = new StorageClient();
$file = fopen($source, 'r');
$bucket = $storage->bucket($bucketName);
$object = $bucket->upload($file, [
'name' => $objectName
]);
}
$new_file_name = "";
$new_file_name = "file-".rand(10,90000).".pdf";
upload_object('bucket-name', $new_file_name, $_FILES["file"]["tmp_name"]);
但这只能将文件从appengine
上传到cloudstorage
而不能将文件从AJAX
发送到PHP
问题必须是
vfs://root/uploads/0
但是为什么呢?PHP函数移动上传的文件
将文件从web服务器的临时存储移动到同一服务器上的另一个位置。此函数的第一个参数是从客户端上传的文件(Ajax
,或任何上传机制)
您的问题是,您需要将上传的文件从web服务器上的临时位置复制到Google云存储。这是一个两步过程(上传文件、将文件复制到GS)
你有两个选择,一个有安全风险。首先是将文件上传到您的web服务器,然后将文件复制到Google云存储。第二种方法存在安全风险,即允许最终用户(客户端)直接将文件上传到谷歌云存储。一种合理的安全方法是使用预先指定的URL
希望这个答案能够解释客户端文件上传到web服务器、然后上传到Google云存储或直接从客户端上传到Google云存储的过程