javascript - 使用 PHP 将文件上传到 Google Cloud Storage Bucket
问题描述
我进行了很多搜索(甚至发现了一些有用的链接,例如使用 PHP 和 Ajax 将文件上传到 Google Cloud Storage Bucket),但我无法让它工作。我需要将 txt 文件上传到我的谷歌云存储桶。
这是我的代码:
gcp_storage.php:
<?php
if(isset($_FILES['file'])){
$errors= array();
// Authentication with Google Cloud Platform
$client = new StorageClient(['keyFilePath' => 'cloudtest-2412**-a66e94ba56**.json']);
$bucket = $client->bucket('cloudtest-2412**.appspot.com ');
// Upload a file to the bucket.
$file = pathinfo($_FILES['file']['name']);
$prefix = uniqid('prefix_', true); //generate random string to avoid name conflicts
$filename = $prefix . "." . $file['extension'];
$bucket->upload(
fopen($_FILES['file']['tmp_name'], 'r'),
['name' => $filename]
);
}
?>
html和js:
<html>
<form id="fileForm" action="" method="post" enctype="multipart/form-data">
<div class="form-row">
<br/>
<div class="form-group">
<label for="textFile">Text File: </label>
<br/>
<input type="file" name="file" id="textFile">
</div>
</div>
<br>
<button type="submit" class="btn btn-lg btn-primary"> Upload </button>
</form>
</html>
<script
src="https://code.jquery.com/jquery-3.4.1.min.js"
integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo="
crossorigin="anonymous"></script>
<script>
$(document).on('submit', '#fileForm', function (e) {
e.preventDefault();
var data = new FormData($('#fileForm').get(0));
$.ajax({
type: 'POST',
url: 'gcp_storage.php',
data: data,
processData: false,
contentType: false,
success: function ($data) {
console.log('Succcess');
$('#success').attr('hidden', false);
}
});
});
</script>
*它显示在我的控制台成功但是当我去谷歌云上的存储桶时,什么都没有出现......
*我从 IAM 页面下载了 .json 文件(该文件与其他文件位于同一目录中)
编辑1:
不知道这是否真的有帮助,如果我删除use Google\Cloud\Storage\StorageClient
,PHP 会抛出错误Class 'StorageClient' not found in /base/data/home/apps/i
(当我放回使用代码时,它只会抛出 500 错误,见下文)
我一直在更改代码并设置断点以查看是否找到 500 错误的来源。如果我从我的 PHP 文件中删除所有内容并放入echo "Test"
,它可以正常工作。
在原代码处打断点后,我发现500错误来自这行代码:
$client = new StorageClient(['keyFilePath' => 'cloudtest-2412**-a66e94ba56**.json']);
$bucket = $client->bucket('cloudtest-2412**.appspot.com');
(验证码)
有什么建议么?
谢谢
解决方案
我想,我们可以看到权限错误。在大多数情况下,内部 500 服务器错误是由于对一个或多个文件或文件夹的权限不正确。
请尝试以下步骤: https ://cloud.google.com/docs/authentication/production#providing_credentials_to_your_application
推荐阅读
- tin-can-api - 在 LMS 上使用 LRS 上的 oAuth 启动 xApi (TinCan) 包
- sql - 在 SQL 代理中安排 SP
- java - 无法检查扫描仪输入是否在数组列表中
- android - Kotlin - 忽略 id 的主键约束 - Android
- python - VS Code:使用调试时的 ModuleNotFoundError
- python - 生成随机坐标直到正确
- php - PHP 警告:PHP 启动:无法加载动态库“intl”未定义符号:__cxa_throw_bad_array_new_length
- c++ - C++ 模板元编程(版本小于 17,最好是 11)
- laravel-5 - 如何编写csv文件并在浏览器中下载?
- azure - 如何改进调试功能?