#php #google-app-engine #google-cloud-storage #bucket
#php #google-app-engine #google-cloud-storage #корзина
Вопрос:
Я долгое время пытался загрузить некоторые счета-фактуры, которые мое приложение (которое работает в app engine) создает в формате pdf, в корзину в GCS. Позже приложение отправит то же самое по электронной почте каждому клиенту. Он хорошо работает при запуске приложения на php с моего локального компьютера, подключаясь к экземпляру App Engine. Но всякий раз, когда я развертываю полный код, он вообще не работает. У меня есть файл учетных данных для учетной записи службы (которая изначально была создана по умолчанию для моего проекта) в папке в моей структуре папок приложения. Я указываю на это каждый раз, когда пытаюсь получить доступ к корзине в GCS, независимо от того, работаю я локально или в GAE. Как я уже сказал, все идет гладко, локально, но ничего из облака. Вот некоторый код.
//FILE TO UPLOAD TO GCS
date_default_timezone_set('Europe/Madrid');
require __DIR__ . '/../vendor/autoload.php';
require_once __DIR__ . '/../cn.php';
require_once __DIR__ . '/../librerias/fpdf/fpdf.php';
if(!isset($_SESSION)){
session_start();
}
use GoogleCloudStorageStorageClient;
putenv('GOOGLE_APPLICATION_CREDENTIALS=../librerias/credentials/credentials.json');
function upload_object($bucketName, $objectName, $source){
$storage = new StorageClient();
$file = $source;
$bucket = $storage->bucket($bucketName);
$object = $bucket->upload($file, [
'name' => $objectName
]);
printf('Uploaded %s to gs://%s/%s' . PHP_EOL, basename($source), $bucketName, $objectName);
}
//############### CODE GENERATING PDF FILE #######################3
//blablablablablablabla
// ################ END OF PDF FILE GENERATION USING FPDF##################
$pdfData=$pdf->Output('S','',1);
$filename="Facturas/".$ano."/".$factura_1."-".$ano.".pdf";
$bucketName="my-bucket.appspot.com";
upload_object($bucketName, $filename, $pdfData);//THIS IS NOT WORKING WHEM RUNNING FROM GAE, BUT WORKING WELL FROM LOCAL CONNECTING TO MY INSTANCE THROUGH PROXY
//############### CODE SENDING PDF FILE USING SENGRID #######################3
//blablablablablablabla
// ################ END OF PDF FILE SENDING ##################
//END OF FILE UPLOAD TO GCS
//APP.YAML
runtime: php72
runtime_config:
document_root: .
handlers:
# Serve a directory as a static resource.
- url: /Css
static_dir: Css
# Serve a directory as a static resource.
- url: /font
static_dir: font
# Serve a directory as a static resource.
- url: /librerias
static_dir: librerias
- url: /librerias/credentials
static_dir: librerias/credentials
# Serve images as static resources.
- url: /icons/(. .(gif|png|jpg|jpeg|ico))$
static_files: icons/1
upload: icons/. .(gif|png|jpg|jpeg|ico)$
- url: /img/(. .(gif|png|jpg|jpeg))$
static_files: img/1
upload: img/. .(gif|png|jpg|jpeg)$
- url: /img/Logos/(. .(gif|png|jpg|jpeg))$
static_files: img/Logos/1
upload: img/Logos/. .(gif|png|jpg|jpeg)$
- url: .*
script: auto
secure: always
entrypoint:
serve handler.php
Комментарии:
1. Вы получаете какие-либо ошибки? что показывают журналы? Пожалуйста, добавьте более подробную информацию к вашему вопросу
2. Не удалось получить доступ к файлу учетных данных shew. Поэтому я изменил способ авторизации своей учетной записи службы, и это сработало
Ответ №1:
Решаемая, я, наконец, заработал. Похоже, проблема в том, как авторизовать мою учетную запись службы. Вместо
putenv('GOOGLE_APPLICATION_CREDENTIALS=../librerias/credentials/credentials.json');
Он работает с
$storage = new StorageClient([
'keyFile' => json_decode(file_get_contents('mycredentials.json'), true)
]);