簡體   English   中英

我無法從 App Engine 將任何文件上傳到 GCS 中的存儲桶,但我可以使用 php 從本地服務器編碼

[英]I can't upload any file to bucket in GCS from App Engine, but I can from my local server coding with php

我一直在嘗試將我的應用程序(在應用程序引擎中運行)創建為 pdf 的一些發票上傳到 GCS 中的存儲桶。 稍后,該應用程序將通過 email 將相同的內容發送給每個客戶。 從我的本地 PC 運行 php 中的應用程序時,它運行良好,連接到 App Engine 實例。 但是每當我部署完整的代碼時,它根本不起作用。 我在應用程序的文件夾結構中的文件夾中有服務帳戶的憑據文件(由默認為我的項目創建的原始文件)。 無論我是在本地工作還是在 GAE 中工作,每當我試圖訪問 GCS 中的存儲桶時,我都會指出它。 正如我所說,一切都從本地順利進行,但從雲端卻一無所獲。 這是一些代碼。

//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 Google\Cloud\Storage\StorageClient;

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

解決了,我終於讓它工作了。 問題似乎是如何授權我的服務帳戶。 代替

putenv('GOOGLE_APPLICATION_CREDENTIALS=../librerias/credentials/credentials.json');

它正在與

$storage = new StorageClient([
    'keyFile' => json_decode(file_get_contents('mycredentials.json'), true)
]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM